Qt 如何实现非弹窗式询问_学到牛牛
在 Qt 中实现非弹窗式询问可以使用 Qt 的信号与槽机制。
首先,我们需要定义一个用于询问的对话框,该对话框包含一个文本框和一个“确定”按钮。当用户在文本框中输入内容并单击“确定”按钮时,我们将触发一个信号,该信号将告知父窗口该询问已完成。

来百度APP畅享高清图片
下面是一个简单的实现示例:
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr) : QDialog(parent) {
// 创建文本框
lineEdit = new QLineEdit(this);
// 创建“确定”按钮
QPushButton *button = new QPushButton("确定", this);
button->setDefault(true);
// 将文本框和按钮添加到对话框中
layout()->addWidget(lineedit);
layout()->addWidget(button);
// 连接信号与槽
connect(button, &QPushButton::clicked, this, &Dialog::确认询问);
}
signals:
void 询问已完成(const QString &response);
private:
QLineEdit *lineedit;
public slots:
void 确认询问() {
QString response = lineedit->text();
// 发送信号,告知父窗口询问已完成
emit 询问已完成(response);
// 隐藏对话框
hide();
}
};
在上面的代码中,我们定义了一个继承自 QDialog 的 Dialog 类,该类包含一个文本框,一个“确定”按钮和一个信号。当用户单击“确定”按钮时,将触发确认询问()槽函数,该函数获取文本框中的内容,并通过信号告知父窗口询问已完成。
最后,在父窗口中,我们可以使用 QMetaObject::Connection 类来连接 Dialog 的信号与槽,并在信号被触发时获取文本框中的内容。
#include <QMetaObject>
#include <QDialog
在父窗口中,我们可以使用以下代码来创建对话框并连接信号与槽:
Dialog = new Dialog(this);
// 使用 QMetaObject::Connection 类连接信号与槽
QMetaObject::Connection connection = QMetaObject::connect(dialog, &Dialog::询问已完成, this, &parent::询问响应);
// 显示对话框
dialog->show();
当用户在对话框中输入内容并单击“确定”按钮时,将触发询问已完成信号,该信号将被连接到父窗口的询问响应槽函数。在槽函数中,我们可以获取文本框中的内容并进行相应的处理。
这种方法的优点是,询问对话框不会阻塞父窗口的执行,并且用户可以在不离开父窗口的情况下完成询问。同时,该方法还可以保持父窗口的界面状态不变,不会因为询问对话框的出现而影响用户的体验。