我有一个问题 - 之前已经讨论了很多,但我看到的所有解决方案都不起作用。 这段代码有什么问题?
main.cpp:8:19: error: invalid use of ‘this’ in non-member function
#include <QApplication>
#include <QPainter>
#include <math.h>
class QPainter;
int main(int argc, char *argv[]){
QApplication app(argc,argv);
QPainter painter(this);
painter.setPen(QPen(Qt::black,3));
int n=8;
for (int i=0;i<n;++i){
qreal fAngle=2*3.14*i/n;
qreal x = 50 + cos(fAngle)*40;
qreal y = 50 + sin(fAngle)*40;
painter.drawPoint(QPointF(x,y));
}
return app.exec();
}
答案 0 :(得分:4)
在函数“main”中,您使用保留关键字“this”,表示“当前对象的地址”。 main是一个函数,而不是任何具有“this”变量的类或对象的成员。我对qt一无所知但google告诉我“QPainter”需要QPaintDevice的地址,但是5秒钟。
http://qt-project.org/doc/qt-5.0/qtgui/qpainter.html#QPainter
答案 1 :(得分:2)
如果你在谈论QPainter画家(这);你在main中使用this指针。 this指针用于对象的成员函数。你的main函数没有这个指针可供使用。
答案 2 :(得分:1)
在Qt中,您需要先创建一个窗口(继承自QWidget
),然后才能在屏幕上看到任何内容。然后,在窗口的QPainter
方法中创建一个paintEvent
对象,然后您将有适当的this
传递给QPainter
构造函数。
强烈建议您遵循一些教程。 Qt很棒,但它很庞大,它不是一个库,而是一个框架(就像大多数其他GUI一样)。
您的代码必须以非常具体的方式构建。
答案 3 :(得分:1)
你只是试图复制一些代码而不了解发生了什么。
看起来你看到了这样的代码:
#include <QtGui>
#include <QWidget>
class MyWidget : public QWidget
{
Q_OBJECT
public:
protected:
void paintEvent(QPaintEvent *event)
{
//create a QPainter and pass a pointer to the device.
//A paint device can be a QWidget, a QPixmap or a QImage
QPainter painter(this); // <- Look at this !!
// ^^^^ Allowed
// ...
}
signals:
public slots:
};
int main( int argc, char **argv )
{
QApplication app( argc, argv );
MyWidget myWidget;
myWidget.show();
return app.exec();
}
在这里你可以看到class
MyWidget
的函数paintEvent中我们使用了this
指针。我们可以因为我们在类的非静态成员中使用它。此处this
的类型为MyWidget*
。
看看标准:
9.3.2此指针[class.this]
在非静态成员函数的主体中,关键字
this
是一个prvalue表达式,其值是调用该函数的对象的地址。类X的成员函数中的类型是X *。
所以你不能在this
函数中使用main
指针,这没有意义。
另外,就像在代码中的注释中所说的那样,你只需要将一个设备指针传递给QPainter
构造函数。它可以是QWidget
,QPixmap
或QImage
。
也许你应该从头开始阅读:http://www.cplusplus.com/doc/tutorial/classes/