QT窗体间值的传递

一、主窗体与子窗体传参

方法有很多,这里介绍一种通过重载子窗体的构造函数实现主窗体参数传入到子窗体,并通过QT信号和槽的机制实现子窗口到主窗口值的传递。

主和子窗体的设置如下:

主要实现功能为:

1 主窗口LineEdit控件按下Enter键后,弹出Dialog窗体并显示与主窗体一样的内容;

2 子窗体按下pushButton按钮后,主窗口显示子窗口内容。

二、功能1  主窗体到子窗体传值

头文件如下:

子窗体:

 1 #ifndef DIALOG_H
 2 #define DIALOG_H
 3
 4 #include <QDialog>
 5 #include <QString>
 6
 7 namespace Ui {
 8 class Dialog;
 9 }
10
11 class Dialog : public QDialog
12 {
13     Q_OBJECT
14
15 public:
16     Dialog(QWidget *parent = 0);
17     Dialog(QWidget *parent,QString S);  // 构造函数 传值
18
19     ~Dialog();
20
21 signals:
22     void sendQString(QString);
23
24
25 private slots:
26     void on_pushButton_clicked();
27
28 private:
29     Ui::Dialog *ui;
30     QString myS;  // 接受主窗体传值
31 };
32
33 #endif // DIALOG_H

主窗体:

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3
 4 #include <QMainWindow>
 5 #include "dialog.h"
 6
 7 namespace Ui {
 8 class MainWindow;
 9 }
10
11 class MainWindow : public QMainWindow
12 {
13     Q_OBJECT
14
15 public:
16     MainWindow(QWidget *parent = 0);
17     ~MainWindow();
18
19 private slots:
20     void receiveSINGAL(QString S);  //  接受子窗体信号的槽函数
21
22     void sendQStringToDialog();  //  Enter建按下的槽函数
23
24
25 private:
26     Ui::MainWindow *ui;
27     Dialog *myDialog;  // 子窗体
28 };
29
30 #endif // MAINWINDOW_H

源文件:

子窗体:

 1 #include "dialog.h"
 2 #include "ui_dialog.h"
 3
 4 Dialog::Dialog(QWidget *parent) :
 5     QDialog(parent),
 6     ui(new Ui::Dialog)
 7 {
 8     ui->setupUi(this);
 9 }
10
11 Dialog::Dialog(QWidget *parent, QString S):
12     QDialog(parent),
13     myS(S),
14     ui(new Ui::Dialog)
15 {
16     ui->setupUi(this);
17     ui->lineEdit->setText(myS);
18 }
19
20 Dialog::~Dialog()
21 {
22     delete ui;
23 }
24
25 void Dialog::on_pushButton_clicked()
26 {
27     emit sendQString(ui->lineEdit->text());
28 }

主窗体:

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3
 4 MainWindow::MainWindow(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9     connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(sendQStringToDialog()));
10     //myDialog->show();
11 }
12
13 MainWindow::~MainWindow()
14 {
15     delete ui;
16 }
17
18 void MainWindow::receiveSINGAL(QString S)
19 {
20     ui->lineEdit->setText(S);
21 }
22
23 void MainWindow::sendQStringToDialog()
24 {
25     myDialog = new Dialog(this,ui->lineEdit->text());
26     connect(myDialog,SIGNAL(sendQString(QString)),this,SLOT(receiveSINGAL(QString)));
27     myDialog->show();
28 }

思想:主窗体首先定义一个按下Enter建后触发的槽sendQStringToDialog,在槽中实现重载的构造函数创建子窗体,并将值传入给Dialog中的LineEdit,最后建立信号和槽的连接connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(sendQStringToDialog()));

二、功能2  子窗体到主窗体传值


利用信号和槽的机制,在子窗体中定义一个信号sendQString,用于传值,并且在pushButton按钮按下的槽函数中发送信号。同时在主窗体定义一个接受信号的槽,并在槽中完成数据的传递。

如下:

PS:感谢网上的资源

时间: 2024-10-13 12:13:24

QT窗体间值的传递的相关文章

3. QT窗体间值的传递(续)

一.前言 上篇博客中通过重载子窗体的构造函数将主窗体的值传入到子窗体,但是在子窗体运行过程中如何才能将值动态的传入到子窗体?可以有两种办法,1.信号和槽的方式传值:2.主窗体中将传出值设置为public 本文主要实现功能为:鼠标点击主窗体的GraphicsView中的Scene时,将对应像素处的各个波段值传递给子窗体的TabelView并显示.其中子窗体的接受主窗体的值是通过2(public)的方式,简单方便. 二.主.子窗体的设计 定义子窗体类:ShowPixelData 主要实现:1 接受主

C#不同窗体间通信,数据传递

在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道.有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后,准备献丑了. 1.       如果很多窗体都需要用到某一窗体的东西,比如登录窗体记录的ID,为了避免每个窗体都去查询数据库,可以把这些公共变量或信息写入配置文件,每个窗体去读配置文件即可. 2.       如果共享信息的窗体不多,则对于兄弟窗口,可以通过其共同的父窗体来传递数据,此时父窗体如果

不同的线程间值的传递

在C# 的应用程序开发中,我们经常要把UI线程和工作线程分开,防止界面停止响应.同时我们又需要在工作线程中更新UI界面上的控件下面介绍几种常用的方法阅读目录线程间操作无效第一种办法:禁止编译器对跨线程访问做检查第二种办法: 使用delegate和invoke来从其他线程中调用控件第三种办法: 使用delegate和BeginInvoke来从其他线程中控制控件第四种办法: 使用BackgroundWorker组件

ArcEngine中两个窗体间地图的传递

                  第一个窗口 Editfrm frm = new Editfrm();//实例化第二个窗口 frm.Tag = axMapControl1.Map;//在Tag属性中存储,第一个窗口的地图 frm.Show(); 第二个窗口 axMapControl.Map=(IMap).Tag;//获取地图

Qt 窗体间传值(代码备份)

刚开始看的时候看的云里雾里的,现在稍微明白一点了.现在假设有一个form,一个MainWindow,如图所示: 实现点击PushButton,将文本框中的内容传输到MainWindow中,显示为Label.界面我已经提前画好.下面是备份代码: form.h: #ifndef FORM_H #define FORM_H #include <QWidget> namespace Ui { class Form; } class Form : public QWidget { Q_OBJECT pu

WinForm多窗体间操作,ComboBox下拉菜单控件

1.通过操作一个窗体打开另一个窗体 已有窗体为Form1.Form1中有一个按钮,对该按钮编写点击事件: Form2 f2 = new Form2();f2.Show(); 通过这段代码来打开Form2. 在实际应用中会出现代开Form2后需要Form1隐藏的情况,此时可以加入代码:this.Hide();来实现隐藏Form1. [不能关闭Form1,如果关闭Form1,那么Form2也会关闭,因为Form1是主窗体] 2.在窗体之间进行值的传递 在某些情况下,需要用到某个已经获取到的值,为了提

窗体间传递数据(跨控件跨类),三种情况与处理方法

环境:Qt5.5 MCVS2013 IDE:QtCreator 范例代码下载地址:http://download.csdn.net/detail/shihoongbo/9134859 发现很多Qt的初学者,经常会在“窗体间如何传递数据”的问题上卡住,而网上通常只是简单描述为使用信号与槽(signal& slot)机制来传递 虽然信号与槽的传递方式确实没错,但是却不一定能适用到全部的情况. 所以,总结了窗体间传递数据的三种情况和对应方法: 模型描述:  已知三个窗体,A为B C的父控件,B与C互为

wp8.1 Study1: 页面导航&amp;页面间值传递

摘要:wp8.1与wp8中很多API是不一样了,wp8.1把以前wp7.x时的api去掉了,更多与win8.1的API相似.比如以下的页面导航和页面之间的值传递 1.页面导航 利用Frame.Navigate() 方法,C#语句如下: 1 Frame.Navigate(typeof(Page2));//Page2为一个页面的名称 这里需要注意的是此方法是可以重载的,即后面介绍的页面间值传递方法. 2.页面间值传递 这里利用Frame.Navigate()重载方法,进行单个值传递和多个值传递 1)

C# 窗体间传递数据

C#两个窗体之间传递数据 1 公用变量值传递 public partial class Form1 : Form //parent form { public string name=""; public Form1() { InitializeComponent(); } private void newBtn_Click(object sender, EventArgs e) { Form2 form2 =new Form2(); form2.ShowDialog(); if (f