信号和插槽qt关闭插槽

时间:2017-04-29 09:22:04

标签: qt qt-signals slot

我做了一个窗口和一个按钮。我希望按钮在单击时关闭窗口,但我想通过我创建的公共插槽来执行此操作,其中包含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();
}

1 个答案:

答案 0 :(得分:0)

问题是广告位中的代码:fenetre().close();。这里fenetre()创建一个调用close()的新对象。所以只需在插槽中调用close(),所有内容都可以按预期工作。

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

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