信号与槽 qt 关闭槽

signals and slots qt close slot

我在里面做了一个window和一个按钮。我希望按钮在单击时关闭 window,但我想通过我创建的 public 插槽来完成它,它包含 QWidget 的关闭插槽,而不是这样做使用默认 QWidget::close()。这是我的代码。

window.h

#ifndef FENETRE_H
#define FENETRE_H

#include <QObject>
#include <QWidget>
#include <QPushButton>

class fenetre: public QWidget
{
Q_OBJECT
public:
    fenetre();

public slots:
    void another();

private:
    QPushButton *button1;
};

#endif // FENETRE_H

window.cpp

#include "fenetre.h"

fenetre::fenetre():QWidget()
{
    setFixedSize(300,300);
    button1=new QPushButton("click",this);

    connect(button1,SIGNAL(clicked()),this,SLOT(another()));
}

void fenetre::another()
{
    fenetre().close();
}

main.cpp

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include "fenetre.h"

int main(int argc , char *argv[])
{
    QApplication app(argc,argv);

    fenetre fen;
    fen.show();

    return app.exec();
}

问题出在插槽中的代码:fenetre().close();。这里 fenetre() 创建了一个新对象,在该对象上调用了 close()。因此,只需在插槽中调用 close(),一切都会按预期工作。

还可以考虑使用 Qt5 样式的函数指针连接,因为它们通常更安全,并且不需要您在头文件中使用 "slots" 标记函数:

connect(button1, &QPushButton::clicked, this, &fenetre::another);