2015-04-28 151 views
1

我創建了一個Qt項目,並添加了一個QPushButton,其樣式是使用QEvent和QMouseEvent自定義的。我添加了一個插槽到這個按鈕,但它沒有工作。 這裏是象礦一個項目:QEvent信號和插槽

部首1:

#ifndef MYQPUSHBUTTON_H 
#define MYQPUSHBUTTON_H 

#include <QPushButton> 
#include <QPalette> 

class myQPushButton : public QPushButton 
{ 
Q_OBJECT 
public: 
explicit myQPushButton(QWidget *parent = 0); 
~myQPushButton(); 
void enterEvent(QEvent*); 
void leaveEvent(QEvent*); 
void mousePressEvent(QMouseEvent * ); 
void mouseReleaseEvent(QMouseEvent * ); 

signals: 

public slots: 

private: 
QPalette *palette; 
}; 

#endif // MYQPUSHBUTTON_H 

標題2:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include "myQPushButton/myqpushbutton.h" 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
Q_OBJECT 

public: 
explicit MainWindow(QWidget *parent = 0); 
~MainWindow(); 

private: 
Ui::MainWindow *ui; 
myQPushButton *button; 
}; 

#endif // MAINWINDOW_H 

源1:

#include "myqpushbutton.h" 

myQPushButton::myQPushButton(QWidget *parent) : 
QPushButton(parent) 
{ 
setFixedSize(200,200); 
setIconSize(QSize(200,200)); 
setIcon(QIcon("D:/clockbox/qt/clockbox/exit_button_wwin_norm.png")); 
setFlat(true); 

} 

myQPushButton::~myQPushButton() 
{ 

} 

void myQPushButton::enterEvent(QEvent*) 
{ 
setIcon(QIcon("D:/clockbox/qt/clockbox/exit_button_wwin_enter.png")); 
} 

void myQPushButton::leaveEvent(QEvent*) 
{ 
setIcon(QIcon("D:/clockbox/qt/clockbox/exit_button_wwin_norm.png")); 
} 

void myQPushButton::mousePressEvent(QMouseEvent *) 
{ 
setIcon(QIcon("D:/clockbox/qt/clockbox/exit_button_wwin_pressed.png")); 
} 

void myQPushButton::mouseReleaseEvent(QMouseEvent *) 
{ 
setIcon(QIcon("D:/clockbox/qt/clockbox/exit_button_wwin_enter.png")); 
} 

源2:

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 
MainWindow w; 
w.show(); 
myQPushButton y; 
QObject::connect(y, SIGNAL(clicked()), &w, SLOT(close())); 

return a.exec(); 
} 

源3:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
ui->setupUi(this); 
button = new myQPushButton(this); 
setCentralWidget(button); 
} 

MainWindow::~MainWindow() 
{ 
delete ui; 
} 

我得到源2此錯誤:

錯誤:調用「QObject的不匹配函數::連接(myQPushButton &,爲const char *,主窗口*,常量char *)' QObject :: connect(y,SIGNAL(clicked()),& w,SLOT(close())); ^

我希望這個按鈕是一個退出按鈕。有人可以幫助我嗎?

+0

也許w :: close()? –

+0

也許'... connect(&y ....'''y'變量不是指針 – vahancho

回答

1

要克服編譯錯誤,您必須將行QObject::connect(y, SIGNAL(clicked()), &w, SLOT(close()));更改爲QObject::connect(&y, SIGNAL(clicked()), &w, SLOT(close()));QObject::connect需要發件人的指針。

但在這裏不是問題,要添加從實際未添加到窗口(您可以創建連接到close插槽main()但後來在MainWindow您創建按鈕y按鈕信號一個新的按鈕,並把它添加到MainWindow作爲中央物件然後,你應該從main()刪除按鈕,然後執行QObject::connect呼叫MainWindow::MainWindow這樣QObject::connect(button, SIGNAL(clicked()), this, SLOT(close()));

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    button = new myQPushButton(this); 
    QObject::connect(button, SIGNAL(clicked()), this, SLOT(close())); 
    setCentralWidget(button); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

主:。

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 
MainWindow w; 
w.show(); 

return a.exec(); 
} 
+0

現在我沒有錯誤信息,但是當我單擊按鈕時什麼也沒有發生 –

+0

@ErwinFülöp您是否刪除了從'main'中添加按鈕並在'MainWindow :: MainWindow'中添加'connect'調用按鈕? –

+0

是的,但是我有同樣的問題。 –