[英]QEvent Signal and Slot
我創建了一個Qt項目,並添加了一個QPushButton,其樣式是使用QEvent和QMouseEvent自定義的。 我在此按鈕上添加了一個插槽,但是它不起作用。 這是一個像我的項目:
標頭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 :: connect(myQPushButton&,const char *,MainWindow *,const char *)'QObject :: connect(y,SIGNAL(clicked()),&w,SLOT(close()) ); ^
我希望此按鈕成為退出按鈕。 有人可以幫助我嗎?
為了克服編譯錯誤,您必須更改QObject::connect(y, SIGNAL(clicked()), &w, SLOT(close()));
到QObject::connect(&y, SIGNAL(clicked()), &w, SLOT(close()));
。 QObject :: connect需要發送者的指針。
但這不是這里的問題,您要添加實際上未添加到窗口的按鈕的信號(您在main()
創建連接到close
插槽的按鈕y
,但稍后在MainWindow
創建一個新的按鈕,並將其作為中央窗口小部件添加到MainWindow
中。然后應從main()
刪除按鈕,並在MainWindow::MainWindow
進行QObject::connect
調用,例如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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.