1.概要
connect(closeButton, &QPushButton::clicked, this, &QWidget::close);
connect(okButton, &QPushButton::clicked, this, &QDialog::accept); // accept 也会调用 close
2.内容
在 Qt 框架中,QWidget 是所有用户界面对象的基类。如果你想让一个 QWidget(或其子类,如 QDialog、QMainWindow 等)关闭自己,通常的做法是调用它的 close() 方法。这个方法会发送一个关闭事件给窗口部件,触发相关的关闭逻辑,并最终从屏幕上移除该窗口部件。
以下是一些具体场景中如何实现这一点的例子:
1. 在 QPushButton 的点击事件中关闭窗口
假设你有一个 QPushButton,当点击这个按钮时,你想关闭包含它的窗口。
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
class MyWidget : public QWidget {
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
QVBoxLayout *layout = new QVBoxLayout(this);
QPushButton *closeButton = new QPushButton("关闭", this);
layout->addWidget(closeButton);
connect(closeButton, &QPushButton::clicked, this, &QWidget::close);
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget w;
w.show();
return app.exec();
}
在这个例子中,我们创建了一个 MyWidget 类,它继承自 QWidget。在这个类的构造函数中,我们设置了一个布局和一个按钮。我们使用 connect 函数将按钮的 clicked 信号连接到 QWidget 的 close 槽,这样当按钮被点击时,窗口就会关闭。
2. 在 QDialog 中关闭对话框
如果你使用的是 QDialog,操作是类似的。你可能会有一个确定按钮,点击后关闭对话框。
#include <QApplication>
#include <QDialog>
#include <QPushButton>
#include <QVBoxLayout>
class MyDialog : public QDialog {
Q_OBJECT
public:
MyDialog(QWidget *parent = nullptr) : QDialog(parent) {
QVBoxLayout *layout = new QVBoxLayout(this);
QPushButton *okButton = new QPushButton("确定", this);
layout->addWidget(okButton);
connect(okButton, &QPushButton::clicked, this, &QDialog::accept); // accept 也会调用 close
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyDialog d;
d.exec(); // 对于对话框,通常使用 exec() 而不是 show()
return app.exec();
}
在这个例子中,我们使用了 QDialog 的 accept() 方法,它不仅关闭了对话框,还可以表示对话框被用户以“接受”的方式关闭(例如,在模态对话框中)。类似地,你也可以使用 reject() 方法来表示对话框被用户以“拒绝”的方式关闭。
总结
- 使用
close()方法可以直接关闭任何QWidget或其子类。 - 对于
QDialog,可以使用accept()或reject()来关闭对话框,并同时表示用户的选择。 - 使用信号和槽机制(
connect)来连接按钮点击事件到关闭操作。
这样,你就可以根据需要控制 QWidget 或其子类窗口的关闭了。
635

被折叠的 条评论
为什么被折叠?



