zoukankan      html  css  js  c++  java
  • 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:感谢网上的资源

  • 相关阅读:
    我的第一个可用的Windows驱动完成了
    据说是一种很古老的方法
    起一卦,测今天工作,问题不少
    起一卦,找房子,马上没房子住了
    哈哈哈哈,我竟然发现了个MSDN里面的笔误
    起一卦,看现在我的工程进度怎么样。
    起卦帮同学看工作,应了。
    2012年10月17日帮朋友算得第一卦
    2013年1月13日帮朋友测的第二卦,有些地方没看出来
    bzoj2588 Spoj 10628. Count on a tree
  • 原文地址:https://www.cnblogs.com/zyore2013/p/4662911.html
Copyright © 2011-2022 走看看