首先新建一個帶ui的主窗口的類,在添加一個帶ui的子窗口類。
界面如下:
單擊主窗口按鈕可以彈出自對話框,單擊子窗口確定按鈕,可以將內容打印主窗口的輸入框中。
主窗口代碼:
頭文件:
#ifndef MAINWIN_H
#define MAINWIN_H
#include <QtWidgets/QWidget>
#include "ui_mainwin.h"
#include "mydialog.h"
class MainWin : public QWidget
{
Q_OBJECT
public:
MainWin(QWidget *parent = 0);
~MainWin();
private slots:
void Click();
private:
Ui::MainWinClass ui;
};
#endif // MAINWIN_H
.cpp文件
#include "mainwin.h"
MainWin::MainWin(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.pushButton, &QPushButton::clicked, this, &MainWin::Click);
}
MainWin::~MainWin()
{
}
void MainWin::Click()
{
MyDialog* pDialog = new MyDialog(this);
// 以模態方式顯示對話框
pDialog->deleteLater();//用完之後刪除,也可以手動delete
int nRet = pDialog->exec();
if (nRet == QDialog::Accepted)
{
//OK按鈕被按下,獲取對話框上的輸入
QString str = pDialog->GetValue();
ui.lineEdit->setText(str);
}
//非模態
//dlg->setAttribute(Qt::WA_DeleteOnClose);// 設置對話框關閉時,自動銷燬對話框
//pDialog->show();
}
模態與非模態讀者可以自行查閱相關自來!
子窗口代碼
頭文件
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
#include "ui_mydialog.h"
class MyDialog : public QDialog
{
Q_OBJECT
public:
MyDialog(QWidget *parent = 0);
~MyDialog();
QString GetValue();
private slots:
void DoSomthing();
private:
Ui::MyDialog ui;
};
#endif // MYDIALOG_H
.cpp文件
#include "mydialog.h"
MyDialog::MyDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
//子對話框按下確定按鈕之後兩種處理方式:自定義槽函數,調用accept();直接connect 函數accept();
//connect(ui.pushButton, &QPushButton::clicked, this, &MyDialog::accept);
connect(ui.pushButton, &QPushButton::clicked, this, &MyDialog::DoSomthing);
}
MyDialog::~MyDialog()
{
}
QString MyDialog::GetValue()
{
return ui.lineEdit->text();
}
void MyDialog::DoSomthing()
{
//TODO
this->accept();
}