2011-11-29 70 views
2

我是Qt的初学者,这是我的第一个Qt程序。我几乎从我的教科书中复制了一个程序,但它没有奏效。我认为我必须犯一个愚蠢的错误,但我无法谷歌的答案。我将发布下面的代码和编译结果。谢谢。错误:ISO C++禁止声明'mousePressEvent'没有类型

glface.h:

#ifndef GLFACE_H 

#define GLFACE_H 

#include<QWidget> 

#include<QPoint> 

class glface: public QWidget 
{ 
Q_OBJECT 
public: 
glface(QWidget *parent = 0); 

protected: 
void paintEvent(QPaintEvent *event); 
void mousePressEvent(QMouseEvent *event); 
void mouseMoveEvent(QMouseEvent *event); 
void mouseReleaseEvent(QMouseEvent *event); 

private slots: 
void clear(); 

void toget(); 

void drawline(QPainter *painter); 


private: 
QTimer *recordtimer; 

static bool got; //the flag for the timer 

bool startdraw; 

QPoint lastpoint; 

QPoint point[100]; 

static int pointcount; 
}; 

#endif // GLFACE_H 

glface.cpp

#include <QtGui> 
#include "glface.h" 


glface::glface(QWidget *parent):QWidget(parent) 
{ 
recordtimer= new QTimer(this); 
connect(recordtimer,SIGNAL(timeout()),this,SLOT(toget())); 


} 
glface::mousePressEvent(QMouseEvent *event) 
{ 
if (event->button==Qt::LeftButton) 
{ 
    startdraw=true; 
    point[pointcount]=event->pos(); 
    pointcount++; 
    recordtimer->start(1000); 

} 


} 
glface::toget() 
{ 
got=true; 
} 

glface::mouseMoveEvent(QMouseEvent *event) 
{ 
if (event->button()==Qt::LeftButton && event->pos()!=lastpoint && startdraw && got) 
{ 
    point[pointcount]=event->pos(); 
    pointcount++; 
    got=false; 
    drawline(&painter); 
} 
} 
glface::mouseReleaseEvent(QMouseEvent *event) 
{ 
point[pointcount]=event->pos(); 
pointcount++; 
startdraw=false; 
recordtimer->stop(); 
got=false; 
pointcount=0; 
} 

glface::paintEvent(QPaintEvent *event) 
{ 
QPainter painter(this); 
painter.setRenderHint(QPainter::Antialiasing, true); 
painter.setPen(QPen(Qt::black, 15, Qt::SolidLine, Qt::RoundCap, 
Qt::MiterJoin)); 
painter.setBackground(Qt::white); 
painter.setWindow(0,0,400,300); 
} 
glface::drawline(QPainter *painter) 
{ 
if (pointcount>1) 
    painter->drawLine(point[pointcount-1],point[pointcout-2]); 

} 

的main.cpp

#include <QApplication> 
#include <QtCore> 
#include "glface.h" 
int main(int argc,char *argv[]) 
{ 
QApplication app(argc, argv); 
glface face; 
face.show(); 
return app.exec(); 

} 

编译的结果:

glface.cpp:12: error: ISO C++ forbids declaration of ‘mousePressEvent’ with no type 
glface.cpp:12: error: prototype for ‘int glface::mousePressEvent(QMouseEvent*)’ does not  match any in class ‘glface’ 
glface.h:15: error: candidate is: virtual void glface::mousePressEvent(QMouseEvent*) 
glface.cpp:25: error: ISO C++ forbids declaration of ‘toget’ with no type 
glface.cpp:25: error: prototype for ‘int glface::toget()’ does not match any in class ‘glface’ 
glface.h:20: error: candidate is: void glface::toget() 
glface.cpp:30: error: ISO C++ forbids declaration of ‘mouseMoveEvent’ with no type 
glface.cpp:30: error: prototype for ‘int glface::mouseMoveEvent(QMouseEvent*)’ does not match any in class ‘glface’ 
glface.h:16: error: candidate is: virtual void glface::mouseMoveEvent(QMouseEvent*) 
glface.cpp:40: error: ISO C++ forbids declaration of ‘mouseReleaseEvent’ with no type 
glface.cpp:40: error: prototype for ‘int glface::mouseReleaseEvent(QMouseEvent*)’ does not match any in class ‘glface’ 
glface.h:17: error: candidate is: virtual void glface::mouseReleaseEvent(QMouseEvent*) 
glface.cpp:50: error: ISO C++ forbids declaration of ‘paintEvent’ with no type 
glface.cpp:50: error: prototype for ‘int glface::paintEvent(QPaintEvent*)’ does not match any in class ‘glface’ 
glface.h:14: error: candidate is: virtual void glface::paintEvent(QPaintEvent*) 
glface.cpp:59: error: ISO C++ forbids declaration of ‘drawline’ with no type 
glface.cpp:59: error: prototype for ‘int glface::drawline(QPainter*)’ does not match any in class ‘glface’ 
glface.h:21: error: candidate is: void glface::drawline(QPainter*) 

回答

6

所有的glface.cpp你的函数定义缺少返回类型:

void glface::mousePressEvent(QMouseEvent *event) 
^^^^ missing 

void glface::mouseMoveEvent(QMouseEvent *event) 
^^^^ missing 

等等

+0

'glface :: glface'看起来极像是一个构造函数,我...你确定在开始时想要'void'?无论你是否发现问题,都可以+1。 –

+0

糟糕,我选择了错误的例子,我会在一秒内修复......感谢您指出了这一点。 – Mysticial

+0

谢谢你指出我愚蠢的错误! – EliteMyth

相关问题