信号与槽 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);
我在里面做了一个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);