Pointer to class can't find function



  • So I have a class called displayData, with a constructor. The constructor has as an argument QPainter *painter, but when the game class tries to add it to the scene, it returns "no matching function for call to 'displayData::displayData()' data = new displayData();
    ^
    I have posted the relevant code here: http://pastebin.com/EsdXC32d


  • Moderators

    You are trying to use displayData without parameter.
    As you are pointing out you have constructor with parameter.

    This will work.

    #ifndef DISPLAYDATA
    #define DISPLAYDATA
    
    #include <QGraphicsTextItem>
    
    class displayData : public QGraphicsTextItem{
    public:
        displayData(QPainter *painter = 0);
    private:
    };
    
    displayData::displayData(QPainter *painter)
    {
        if ( painter )
        {
            painter->setFont(QFont("times", 13));
            painter->drawText(5,15, QString("Speed: " + QString::number(speed)));
            painter->drawText(5, 30, QString("Rotation: " + QString::number(planeRotation)));
        }
    }
    
    


  • @koahnig I did what you suggested, but now there is no text on the screen. When I build and run it says, "Note, no relevant classes found. No output generated." I have been able to display it on screen, but the reason I bring this up is so I can update the data displayed when the user hits one of the arrow keys. I might be using the wrong approach, but it seems to me that if I just make the constructor paint it it will be easier to access from outside classes. The example I am basing this off uses the paint() function and overrides it, but I tried to instead use the QPainter in the constructor to take up less space, and make it more accessible from other classes in other files.

    Thank you for your help!


  • Moderators

    @nanoandrew4

    It depends what you are trying to do.
    I have simply updated the code which gave an error message. If those ae the only lines executed, there will be no text for sure.

        data = new displayData();
        scene->addItem(data);
    

    The first statement is creating an object with the default value handed to the constructor. The default value is a zero pointer. In the constructor the pointer is tested and since the pointer is zero the three statements are not carried out.
    If you are removing the if-statement, yopu will face a crash.

    Anyhow, there is still a conceptual problem in your program. However, it is not posssible to give you further help with the little information available. The only hint is that you need to use a pointer to QPainter when you do the initialization of displayData or you have to supply later.



  • @koahnig Ok so this might not be the right way to do it. Before I did this I used the paint() function, and used that to paint the text, but could not figure out how to update it once painted. The code I used was this http://pastebin.com/5pDbV0uw , but I can't run the function from outside the class, at least I don't know how to do it. What I want is to update the speed/rotation to match the actual values when a key is hit from the plane class using the keyPressEvent. Any hints on how to do that?


  • Moderators

    Well, there is still some code missing to make this run.

    Please post code directly here in your replies. This makes it easier for others to read and respond.

    I am suggesting to you to go through some of the tutorials for Qt. Possibly you shall also revisit some tutorials for C++.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.