• 2. 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:感谢网上的资源

  • 相关阅读:
    ubuntu12.04 安装CAJViewer-ubuntu(待解决)
    ROS中遇到的一些问题和解决(更新)
    Virtualbox主机和虚拟机之间文件夹共享及双向拷贝
    Ubuntu自带截图工具screenshoot
    Ubuntu vim终端常用的快捷键
    Ubuntu终端多窗口分屏Terminator
    Apollo快速安装视频教程
    ML--XOR问题
    DL之Example1--MNIST
    Python之ML--人工神经网络识别图像
  • 原文地址:https://www.cnblogs.com/zyore2013/p/4662911.html
Copyright © 2020-2023  润新知