欢迎光临散文网 会员登陆 & 注册

Qt 如何实现非弹窗式询问_学到牛牛

2023-09-05 14:34 作者:四川学到牛科技  | 我要投稿

在 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();

当用户在对话框中输入内容并单击“确定”按钮时,将触发询问已完成信号,该信号将被连接到父窗口的询问响应槽函数。在槽函数中,我们可以获取文本框中的内容并进行相应的处理。

这种方法的优点是,询问对话框不会阻塞父窗口的执行,并且用户可以在不离开父窗口的情况下完成询问。同时,该方法还可以保持父窗口的界面状态不变,不会因为询问对话框的出现而影响用户的体验。


Qt 如何实现非弹窗式询问_学到牛牛的评论 (共 条)

分享到微博请遵守国家法律