gpt4 book ai didi

c++ - QEvent 信号和槽

转载 作者:行者123 更新时间:2023-11-30 05:44:10 25 4
gpt4 key购买 nike

我创建了一个 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需要发送者的指针。

但这不是这里的问题,您从一个按钮添加信号,但实际上并未添加到窗口(您创建按钮 y 连接到 close 中的 main() 插槽,但稍后在 MainWindow 中,您创建一个新按钮并将其添加到 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();
}

关于c++ - QEvent 信号和槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com