《Qt》part 3 Qt5.5.0窗口之间传值(一)

2023-12-20 08:18
文章标签 qt 传值 窗口 part 之间 qt5.5

本文主要是介绍《Qt》part 3 Qt5.5.0窗口之间传值(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

part 3 Qt5.5.0窗口之间传值(一)

一、信号与槽机制传值

1、主窗口与子窗口之间传值:

主窗口为ParentChild,继承MainWindow类

子窗口为TestDialog,继承QDialog类

1)TestDialog:


(1)testdialog.h

#ifndef TESTDIALOG_H
#define TESTDIALOG_H#include <QtWidgets/QDialog>
#include "ui_testdialog.h"//namespace Ui{
//	class TestDialog;
//}class TestDialog : public QDialog
{Q_OBJECTpublic:TestDialog(QWidget *parent = 0);~TestDialog();signals:void dlgReturn(/*int*/QString);
private slots:void pushButton_clicked();
private:Ui::TestDialog ui;};#endif // TESTDIALOG_H

(2)、testdialog.cpp

#include "testdialog.h"TestDialog::TestDialog(QWidget *parent): QDialog(parent){ui.setupUi(this);connect(ui.on_pushButton_ok, SIGNAL(clicked()), this, SLOT(pushButton_clicked()));//确定按钮得信号槽函数,点击后发射信号dlgReturn(int or Qstring)
}TestDialog::~TestDialog()
{}void
TestDialog::pushButton_clicked()
{emit dlgReturn(ui.lineEdit->text()/*.toInt()*/);//close();}
2)ParentChild:

(1)parentchild.h

#ifndef PARENTCHILD_H
#define PARENTCHILD_H#include <QtWidgets/QMainWindow>
#include "ui_parentchild.h"#include "testdialog.h"
#include "ui_testdialog.h"#include <qlabel.h>
#include <qstring.h>namespace Ui{class ParentChild;
}
class ParentChild : public QMainWindow
{Q_OBJECTpublic:ParentChild(QWidget *parent = 0);~ParentChild();private slots:
void showValue(QString/*int*/);
public slots:void on_pushButton_clicked();private:Ui::ParentChildClass ui;};#endif // PARENTCHILD_H

(2)parentchild.cpp

#include "parentchild.h"
#include "ui_parentchild.h"#include "testdialog.h"ParentChild::ParentChild(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);this->setWindowTitle(QString::fromLocal8Bit("窗口传值测试"));//关联信号和槽函数connect(ui.pushButton_Dlg, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));//主窗口信号槽函数,点击后弹出对话框,连接子窗口的发射信号,同<span style="white-space:pre">											</span>  //时触发显示函数showValue(int or Qstring)
}ParentChild::~ParentChild()
{}void
ParentChild::showValue(/*int*/QString val)
{QString str = QString("%1").arg(val);ui.label->setText(str);
}void 
ParentChild::on_pushButton_clicked()
{TestDialog *dlg = new TestDialog(this);dlg->setModal(false);//非模态为false,模态为trueconnect(dlg, SIGNAL(dlgReturn(QString/*int*/)), this, SLOT(showValue(QString/*int*/)));//连接信号与槽dlg->show();
}
3)main.cpp

这个不用做任何更改

#include "parentchild.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);ParentChild w;w.show();return a.exec();
}

运行:



二、Public函数传值

1、子窗口向主窗口传值

主窗口为ParentChild,继承MainWindow类

子窗口为TestDialog,继承QDialog类

该程序先弹出子窗口,然后传值给主窗口
1)TestDialog子窗口
子窗口中通过按钮来触发传参

(1)testdialog.h
#ifndef TESTDIALOG_H
#define TESTDIALOG_H#include <QtWidgets/QDialog>
#include "ui_testdialog.h"class TestDialog : public QDialog
{Q_OBJECTpublic:TestDialog(QWidget *parent = 0);~TestDialog();private slots:void pushButton_clicked();private:Ui::TestDialog ui;
};#endif // TESTDIALOG_H

(2)testdialog.cpp
#include "testdialog.h"/
#include "ui_parentchild.h"
#include "parentchild.h"
/TestDialog::TestDialog(QWidget *parent): QDialog(parent)
{ui.setupUi(this);connect(ui.pushButton_ok, SIGNAL(clicked()), this, SLOT(pushButton_clicked()));
}TestDialog::~TestDialog()
{}void 
TestDialog::pushButton_clicked()
{ParentChild *w  = new ParentChild;w->dlgReturn(ui.lineEdit->text());w->show();
}

2)ParentChild主窗口
主窗口中没有信号槽触发函数

(1)parentchild.h
#ifndef PARENTCHILD_H
#define PARENTCHILD_H#include <QtWidgets/QMainWindow>
#include "ui_parentchild.h"#include "testdialog.h"
#include "ui_testdialog.h"
class ParentChild : public QMainWindow
{Q_OBJECTpublic:ParentChild(QWidget *parent = 0);~ParentChild();public:void dlgReturn(QString data);private:Ui::ParentChild ui;
};#endif // PARENTCHILD_H

(2)parentchild.cpp
#include "parentchild.h"ParentChild::ParentChild(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);}ParentChild::~ParentChild()
{}void 
ParentChild::dlgReturn(QString data)
{ui.label->setText(data);ui.lineEdit_1->setText(data);
}
3)main.cpp
这个main.cpp中的代码是首先弹出子窗口来传值的注意下,头文件中要加入子窗口头文件,主窗口的头文件可以注释也可以保留
/
//#include "parentchild.h"
#include "testdialog.h"
/
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);//ParentChild w;TestDialog w;w.show();return a.exec();
}

运行:





这篇关于《Qt》part 3 Qt5.5.0窗口之间传值(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/515345

相关文章

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务