QEvent信号和插槽
我创建了一个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())); ^
我希望这个按钮是一个退出按钮。有人可以帮助我吗?
要克服编译错误,您必须将行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();
}
现在我没有错误信息,但是当我单击按钮时什么也没有发生 –
@ErwinFülöp您是否删除了从'main'中添加按钮并在'MainWindow :: MainWindow'中添加'connect'调用按钮? –
是的,但是我有同样的问题。 –
也许w :: close()? –
也许'... connect(&y ....'''y'变量不是指针 – vahancho