QT 父窗口如何通過單擊按鈕調出自定義對話框

首先新建一個帶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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章