在Qt中实现退出按钮

Implementing Exit button in Qt

本文关键字:退出 按钮 实现 Qt      更新时间:2023-10-16

我正在尝试实现退出按钮,但我无法使用connect()方法来执行此操作。实际上据我所知,我的按钮没有发出任何信号,但我找不到问题所在。这是我使用connect()方法的代码的一部分:

#include "MyMainWindow.h"
MyMainWindow::MyMainWindow(QWidget * parent, Qt::WindowFlags flag) :
        QMainWindow(parent, flag)
{
    this->setFixedSize(1120, 630);
    menu = new MyMenu(this);
    this->setCentralWidget(menu);
    this->show();
    // the connect implementation
    connect(menu->exit, SIGNAL(clicked()), this, SLOT(this->exit_button_clicked()));
}
MyMainWindow::~MyMainWindow()
{
}
void MyMainWindow::exit_button_clicked()
{
    this->close();
}

MyMainWindowMyMenu的朋友班,exit是私人QPushButton。现在我需要一些帮助来解决这个问题。

您可以直接使用如下

connect(menu->exit, SIGNAL(clicked()), this, SLOT(close()));

无需创建新方法exit_button_clicked() SLOT

SLOT是一个实际接受字符串而不是 C++ 有效表达式的宏。

SLOT(this->exit_button_clicked())不会链接到正确的插槽。您需要改为编写SLOT(exit_button_clicked())。Qt Creator的自动完成功能可以为所选对象建议有效的插槽。

重新注释的替代方法是使用新语法。如果您的编译器支持 C++11,您可以在 Qt 5 中使用它。这种语法的优点是对信号、时隙及其参数进行编译时检查。

如果menu->exit是私有的,则无法从其他类访问它,除非将其声明为friend class。您可能需要MyMenu类中创建公共getter。

即使有一个不使用lambda的解决方案,对于简单的操作,lambdas也很好用:

connect(menu->exit, &QPushButton::clicked(), [&this]{ exit_button_clicked(); });

当执行某些操作的实际语法非常接近您对它的期望时,这非常好:)