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

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

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

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

一、主界面QMainWindow的设置

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

关键代码:

//菜单栏的设置

QAction* rotate = new QAction("rotate a angel", this);

QMenu* menu2 = menuBar()->addMenu("rotate");

menu2->addAction(rotate);

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

二、子窗体QDialog的设置

子窗体样式如下:

设置方法如下:

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

EditRotate.h

#include

#include

#include

#include

#include

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);

}

5.连接信号与槽

EditRotate.cpp

//子窗口按下信号和发射数据槽函数连接

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

SimilarProject.cpp

connect(rotate, SIGNAL(triggered()), this, SLOT(clickRotateMenu()));//菜单点击,子窗体生成

connect(e,SIGNAL(sendData(QString)),this,SLOT(receiveData(QString)));//发射信号和接受槽函数连接

于是乎,子窗体设置,点击,主窗体接收数据,显示!

Done!

python多窗口传递信息,认识QT ----- 多窗口以及窗口之间的传值相关推荐

  1. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  2. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  3. python PyQt5 QMainWindow类(Qt主窗口框架,主窗口提供了用于构建应用程序用户界面的框架)

    https://doc.qt.io/qtforpython/PySide2/QtWidgets/QMainWindow.html?highlight=qmainwindow#PySide2.QtWid ...

  4. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)

    目录 1.单一窗口数据传输 2.多窗口数据传输:调用属性 3.多窗口数据传输:信号与槽 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的.如果这个程序有多个 ...

  5. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  6. PyQt5窗口最小化后,任务栏窗口预览(Windows速览)持续刷新(C++ Qt同理)

    PyQt5 / Qt窗口最小化后,鼠标悬停,任务栏窗口预览(Windows速览)继续保持刷新状态 问题描述 解决方案 完整代码 问题描述 最近在做一个PyQt5项目,其中有一个功能是窗口启动后开始计时 ...

  7. python图形界面化编程GUI(一)窗口管理和常用的组件(Label、Button、Entry)

    GUI GUI(Graphics User Interface)图形用户界面编程.我们可以通过 python 提供的丰富的组件,快速的实现使用图形的界面和用户交互. GUI 编程类似于"搭积 ...

  8. Qt应用程序主窗口之一:主窗口框架

    对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...

  9. QT自定义窗口插件在QT Creator的应用

    根据<C++ GUI Programming with Qt 4,Second Edition>中第5章的"在Qt设计师中集成自定义窗口部件"小节,使用插件法生成的窗口 ...

最新文章

  1. 一个简单的blog系统(九) 增加标签和标签页面
  2. bash-shell高级编程-变量的赋值
  3. fastdfs-配置存储服务器storage
  4. adb 提示:error: unknown host service解决方法
  5. 电脑rar文件打开方式_新手使用苹果电脑Mac,知道这些让你用起来更舒心。
  6. java窗体实现射击_java_Java基于Swing实现的打猎射击游戏代码,本文实例讲述了Java基于Swing实 - phpStudy...
  7. Spring事件监听机制
  8. 离散数学与c语言程序设计,2016年中山大学数据科学与计算机学院S6705002离散数学与C程序设计)之C程序设计复试笔试最后押题五套卷...
  9. rose软件下载(Rational Rose 2003 Enterprise Edition)
  10. 主动轮廓模型——Snake分割算法(MATLAB)
  11. 微信公众号定位显示EC-01G模组+STM32F103
  12. Mac中将Apple移动设备(iPhone或iPad)屏幕录屏转换为gif图片的极简方法
  13. 安卓10刷Magisk并安装JustTrustMe
  14. 圆柱体积怎么算立方公式_圆柱体积公式是什么,怎么算,
  15. TEM Imaging Analysis (TIA) for win10
  16. refresh是什么?Spring refresh的12个步骤
  17. JAVA使用wkhtmltopdf 将Html 导出PDF
  18. DIST@SAU实验室学生博客名单
  19. android studio调用python_Android Studio调用python运行thensorflow模型--CLE方案实现
  20. swagger2的全新UI组件Knife4j

热门文章

  1. 大数据分析技术未来发展会如何
  2. 大数据如何助力农业发展
  3. 大数据技术对互联网的影响
  4. HBase-shell及happyhbase
  5. 当前仍在编辑文章 - Java 并 发 编 程 基 础
  6. 南开大学计算机学院夏令营,2022保研夏令营:南开大学计算机学院云端夏令营通知...
  7. php微信二次分享出错,解决微信二次分享bug
  8. Java中Set的使用
  9. Cognos8.3 + oracle9i数据集市 建cube性能调整
  10. 常用js(javascript)函数