您的位置:首页 > 编程语言 > Qt开发

认识QT ----- 多窗口以及窗口之间的传值

2015-12-01 15:13 471 查看



在很多软件中,都有这样一个设定:点击菜单栏中的某一个选项,软件将弹出一个新的窗体,用户在该窗体上进行简单的设置,于是主窗体会根据设定做出相应的改变。

这次我将来尝试一下,具体任务如下:

QMainWindow的菜单栏中,点击菜单选项,弹出一个QDialog对话框,可输入文本,输入文本完成之后,点击对话框的确定按钮,输入的文本将显示到主界面QMainWindow上。

我们一步一步来完成这个任务:

一、主界面QMainWindow的设置



如上图所示,本次实验我们主要用到其中的菜单栏和四个标签中的一个标签作为显示。 若点击菜单栏中的“rotate”选项,会弹出子菜单“choose a angle”,点击该子菜单将会弹出对话框。

关键代码:

//菜单栏的设置e);

其余的布局等知识点请详见上篇博。


伦理片 http://www.dotdy.com/

二、子窗体QDialog的设置
子窗体样式如下:



设置方法如下:

在QMainWindow的基础下 ,依葫芦画瓢创建一个.h头文件和.cpp源文件,注意,名字应该相同为好!如下图举例所示:



EditRotate.h

#include <QtWidgets/QDialog>

#include <QHBoxLayout>

#include <QTextEdit>

#include <QtWidgets/Qlabel>

#include <QtWidgets/qpushbutton.h>

class EditRotate : public QDialog

{

Q_OBJECT

public:

EditRotate(QWidget *parent = 0);

~EditRotate();

//定义控件

QLabel* label;

QTextEdit* edit;

QPushButton* btn;

signals:

void sendData(QString);

public slots:

void clickOk();

};

注意:这里原本有跟Ui有关的私有成员,这里我删去了,这个东西是跟ui界面设计有关,也就是QT设计师设计有关,我们这里使用代码就不用QT设计师了。

EditRotate.cpp

EditRotate::EditRotate(QWidget *parent)

: QDialog(parent)

{

this->setWindowModality(Qt::ApplicationModal);

//ui.setupUi(this);

this->setFixedSize(160, 50);

this->setWindowTitle("Rotate");

//初始化控件

label = new QLabel("Angel: ", this);

edit = new QTextEdit(this);

edit->resize(30, 10);

btn = new QPushButton("Ok", this);

//开始布局

QHBoxLayout* hl = new QHBoxLayout(this);

hl->addWidget(label);

hl->addWidget(edit);

hl->addWidget(btn);

this->setLayout(hl);

//信号和槽函数连接

connect(btn, SIGNAL(clicked()), this, SLOT(clickOk()));

}

注:这里继承的是QDialog类。

三、主窗体和子窗体的信息传递(子->主)

这是本文讲述的重点。具体实现方法见下:

1.在子窗口类声明信号-----sendData(QString)

声明槽函数----clickOK()

EditRotate.h

signals:

void sendData(QString); //只用声明不用定义

public slots:

void clickOk();//需要定义,点击按钮的槽函数

2.定义clickOK槽函数---发射数据

EditRotate.cpp

void EditRotate::clickOk()

{

QString str = edit->toPlainText();

emit sendData(str);//使用emit关键词,发射数据

}

3.主窗体类声明槽函数

SimilarProject.h

public slots:

void clickRotateMenu();//点击菜单,子窗体生成

void receiveData(QString data);//接受数据

4.主窗体槽函数定义

SimilarProject.cpp

void SimilarProject::clickRotateMenu()

{

//初始化窗体

e->show();

}

void SimilarProject::receiveData(QString data)

{

imgLab3->setText(data);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: