Qt 如何實現(xiàn)非彈窗式詢問_學(xué)到牛牛
在 Qt 中實現(xiàn)非彈窗式詢問可以使用 Qt 的信號與槽機制。
首先,我們需要定義一個用于詢問的對話框,該對話框包含一個文本框和一個“確定”按鈕。當(dāng)用戶在文本框中輸入內(nèi)容并單擊“確定”按鈕時,我們將觸發(fā)一個信號,該信號將告知父窗口該詢問已完成。

來百度APP暢享高清圖片
下面是一個簡單的實現(xiàn)示例:
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr) : QDialog(parent) {
// 創(chuàng)建文本框
lineEdit = new QLineEdit(this);
// 創(chuàng)建“確定”按鈕
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();
// 發(fā)送信號,告知父窗口詢問已完成
emit 詢問已完成(response);
// 隱藏對話框
hide();
}
};
在上面的代碼中,我們定義了一個繼承自 QDialog 的 Dialog 類,該類包含一個文本框,一個“確定”按鈕和一個信號。當(dāng)用戶單擊“確定”按鈕時,將觸發(fā)確認詢問()槽函數(shù),該函數(shù)獲取文本框中的內(nèi)容,并通過信號告知父窗口詢問已完成。
最后,在父窗口中,我們可以使用 QMetaObject::Connection 類來連接 Dialog 的信號與槽,并在信號被觸發(fā)時獲取文本框中的內(nèi)容。
#include <QMetaObject>
#include <QDialog
在父窗口中,我們可以使用以下代碼來創(chuàng)建對話框并連接信號與槽:
Dialog = new Dialog(this);
// 使用 QMetaObject::Connection 類連接信號與槽
QMetaObject::Connection connection = QMetaObject::connect(dialog, &Dialog::詢問已完成, this, &parent::詢問響應(yīng));
// 顯示對話框
dialog->show();
當(dāng)用戶在對話框中輸入內(nèi)容并單擊“確定”按鈕時,將觸發(fā)詢問已完成信號,該信號將被連接到父窗口的詢問響應(yīng)槽函數(shù)。在槽函數(shù)中,我們可以獲取文本框中的內(nèi)容并進行相應(yīng)的處理。
這種方法的優(yōu)點是,詢問對話框不會阻塞父窗口的執(zhí)行,并且用戶可以在不離開父窗口的情況下完成詢問。同時,該方法還可以保持父窗口的界面狀態(tài)不變,不會因為詢問對話框的出現(xiàn)而影響用戶的體驗。