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 -
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))); } }
-
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!
-
@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!
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.
-
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?
-
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++.