首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QEvent信号和插槽

QEvent信号和插槽
EN

Stack Overflow用户
提问于 2015-04-28 16:44:48
回答 1查看 775关注 0票数 1

我创建了一个Qt项目,并添加了一个带有我用QEvent和QMouseEvent定制的样式的QPushButton。我给这个按钮增加了一个插槽,但它不工作。下面是一个和我类似的项目:

标题1:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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();^

我希望这个按钮是一个退出按钮。有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 16:49:13

要克服编译错误,必须将行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()));

代码语言:javascript
复制
#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;
}

main:

代码语言:javascript
复制
#include "mainwindow.h"
#include <QApplication>

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

return a.exec();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29914547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档