信号和插槽qt闭合插槽

信号和插槽qt闭合插槽,qt,qt-signals,slot,Qt,Qt Signals,Slot,我做了一个窗户和一个按钮。我希望按钮在单击时关闭窗口,但我希望通过我创建的一个公共槽来执行此操作,该槽包含QWidget的关闭槽,而不是使用默认的QWidget::close()。这是我的密码 窗户 #ifndef FENETRE_H #define FENETRE_H #include <QObject> #include <QWidget> #include <QPushButton> class fenetre: public QWidget { Q

我做了一个窗户和一个按钮。我希望按钮在单击时关闭窗口,但我希望通过我创建的一个公共槽来执行此操作,该槽包含
QWidget
的关闭槽,而不是使用默认的
QWidget::close()
。这是我的密码

窗户

#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
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.h”
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
芬奈特芬;
fen.show();
返回app.exec();
}

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

也考虑使用QT5样式与函数指针连接,因为它们一般更安全,不需要用头文件中的“槽”来标记函数:

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

另一个
的实现中,您有
fenetre().close()
。这将创建一个临时的
fenetre
,对其调用
close
,然后超出范围。将该行更改为simply
close()
。谢谢,它现在可以工作了!!这就是用小写名称命名类所得到的结果。。。当你看到
Fenetre()
时,它至少应该会引起你的注意:)
connect(button1, &QPushButton::clicked, this, &fenetre::another);