2011-11-29 175 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