2015-04-28 141 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

是的,但是我有同样的问题。 –