QT界面:子窗口與父窗口交互

環境:Win10-x64+VS2015+Qt5.9.7

首先創建一個Qt GUI Application,工程名爲tabWidget。

頭文件

tabWidget.h

#pragma once

#include <QtWidgets/QMainWindow>
#include <QDebug>
#include <QHBoxLayout>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include <QMessageBox>

#include "ui_tabWidget.h"

#pragma execution_character_set("utf-8")

class tabWidget : public QMainWindow
{
	Q_OBJECT

public:
	tabWidget(QWidget *parent = Q_NULLPTR);

private:
	Ui::tabWidgetClass ui;

	QPushButton *startGrabbingPushButton;
	QPushButton *stopGrabbingPushButton;

private slots:
	void runPushButtonSlot();

};

源文件

#include "tabWidget.h"

tabWidget::tabWidget(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	QHBoxLayout *hlayout1 = new QHBoxLayout;
	QRadioButton *continusModeRadioButton = new QRadioButton(tr("連續"));
	QRadioButton *triggerModeRadioButton = new QRadioButton(tr("觸發"));
	hlayout1->addWidget(continusModeRadioButton);
	hlayout1->addWidget(triggerModeRadioButton);
	
	QHBoxLayout *hlayout2 = new QHBoxLayout;
	startGrabbingPushButton = new QPushButton(tr("開始"));
	startGrabbingPushButton->setStyleSheet("background-color: rgb(0, 255, 127);");
	QObject::connect(startGrabbingPushButton, SIGNAL(clicked()), this, SLOT(runPushButtonSlot()));
	stopGrabbingPushButton = new QPushButton(tr("停止"));

	hlayout2->addWidget(startGrabbingPushButton);
	hlayout2->addWidget(stopGrabbingPushButton);

	QGridLayout *vlayout = new QGridLayout;
	vlayout->addLayout(hlayout1, 0, 0);
	vlayout->addLayout(hlayout2, 1, 0);

	QWidget *widget = new QWidget();
	this->setCentralWidget(widget);

	centralWidget()->setLayout(vlayout);
}

void tabWidget::runPushButtonSlot()
{
	QMessageBox::information(this, "提示:", "提示-------");
	startGrabbingPushButton->setStyleSheet("background-color: rgb(255, 100, 100);");
}

效果如圖:
在這裏插入圖片描述

添加子窗口

解決方案資源管理器–>右鍵工程–>選擇添加Qt GUI Class:

在這裏插入圖片描述
創建一個名爲LoginDlg的Qt GUI 類:
在這裏插入圖片描述
然後,在LoginDlg.ui上繪製兩個按鈕控件,分別命名爲:loginPushButton、cancelPushButton,如圖:
在這裏插入圖片描述

LoginDlg頭文件:

LoginDlg.h:

#pragma once

#include <QWidget>
#include "ui_LoginDlg.h"

class LoginDlg : public QWidget
{
	Q_OBJECT

public:
	LoginDlg(QWidget *parent = Q_NULLPTR);
	~LoginDlg();

private:
	Ui::LoginDlg ui;

private slots:
	void loginPushButtonSlot();


signals:
	void getSoftwareMode(QString sMode);

};

LoginDlg源文件:

LoginDlg.cpp:

#include "LoginDlg.h"

LoginDlg::LoginDlg(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this); //
	QObject::connect(ui.loginPushButton, SIGNAL(clicked()), this, SLOT(loginPushButtonSlot()));
}

LoginDlg::~LoginDlg()
{
}


void LoginDlg::loginPushButtonSlot()
{
	emit getSoftwareMode("UserMode");
	this->close();
}

tabWidget頭文件改爲:

tabWidget.h:

#pragma once

#include <QtWidgets/QMainWindow>
#include <QDebug>
#include <QHBoxLayout>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include <QMessageBox>

#include "ui_tabWidget.h"
#include "LoginDlg.h"

#pragma execution_character_set("utf-8")

class tabWidget : public QMainWindow
{
	Q_OBJECT

public:
	tabWidget(QWidget *parent = Q_NULLPTR);

private:
	Ui::tabWidgetClass ui;

	QPushButton *startGrabbingPushButton;
	QPushButton *stopGrabbingPushButton;
	LoginDlg *loginDlg;

private slots:
	void runPushButtonSlot();
	void setSoftwareModeSlot(QString sMode);
};

tabWidget源文件改爲:

tabWidget.cpp:

#include "tabWidget.h"

tabWidget::tabWidget(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	QHBoxLayout *hlayout1 = new QHBoxLayout;
	QRadioButton *continusModeRadioButton = new QRadioButton(tr("連續"));
	QRadioButton *triggerModeRadioButton = new QRadioButton(tr("觸發"));
	hlayout1->addWidget(continusModeRadioButton);
	hlayout1->addWidget(triggerModeRadioButton);
	
	QHBoxLayout *hlayout2 = new QHBoxLayout;
	startGrabbingPushButton = new QPushButton(tr("開始"));
	startGrabbingPushButton->setStyleSheet("background-color: rgb(0, 255, 127);");
	QObject::connect(startGrabbingPushButton, SIGNAL(clicked()), this, SLOT(runPushButtonSlot()));
	stopGrabbingPushButton = new QPushButton(tr("停止"));

	hlayout2->addWidget(startGrabbingPushButton);
	hlayout2->addWidget(stopGrabbingPushButton);

	QGridLayout *vlayout = new QGridLayout;
	vlayout->addLayout(hlayout1, 0, 0);
	vlayout->addLayout(hlayout2, 1, 0);

	QWidget *widget = new QWidget();
	this->setCentralWidget(widget);
	centralWidget()->setLayout(vlayout);
}

void tabWidget::runPushButtonSlot()
{

	Qt::WindowFlags flags = Qt::Dialog;
	loginDlg = new LoginDlg(this);
	loginDlg->setWindowFlags(flags);
	connect(loginDlg, SIGNAL(getSoftwareMode(QString)), this, SLOT(setSoftwareModeSlot(QString)));
	loginDlg->setWindowTitle("登錄");
	loginDlg->setWindowModality(Qt::ApplicationModal);
	loginDlg->show();
}


void tabWidget::setSoftwareModeSlot(QString sMode)
{
	if (sMode == "UserMode")
	{
		startGrabbingPushButton->setStyleSheet("background-color: rgb(255, 100, 100);");
		QMessageBox::information(this, "提示:", "登錄成功!");
	}
	
}

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章