我做了一个窗口和一个按钮。我希望按钮在单击时关闭窗口,但我想通过我创建的公共插槽来执行此操作,其中包含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();
}
答案 0 :(得分:0)
问题是广告位中的代码:fenetre().close();
。这里fenetre()
创建一个调用close()
的新对象。所以只需在插槽中调用close()
,所有内容都可以按预期工作。
还考虑使用Qt5样式连接函数指针,因为它们通常更安全,并且不要求您在头文件中用“slots”标记函数:
connect(button1, &QPushButton::clicked, this, &fenetre::another);