IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> qt窗口之间如何通信或信息共享?(C++版) -> 正文阅读

[C++知识库]qt窗口之间如何通信或信息共享?(C++版)

在逛知乎的时候,看到的这篇帖子,奈何里面的代码都是python版的,博主的三个例子看完,刚好有时候也遇到这个问题,今天仔细整理总结一次。原文python版的在这里:qt窗口之间如何通信或信息共享?

1. 单一窗口通过信号槽传递信息

单一窗口的程序来说,利用信号与槽机制来传递信息较为方便。

Qt学习(一)简单界面_Learning by doing-CSDN博客_qt界面

2.多窗口数据传输:调用属性

在主窗口中调用对话框有两种方法,单击“弹出对话框"按钮,在对话框的时间日期控件中选择日期,则会把所选中的日期返回到主窗口的lineText文本框控件中。

使用两个按钮(Ok和Cancel)分别连接accept()和reject()槽函数。在类中定义一个静态函数getDateTime(),该静态函数返回3个时间值。原理是利用静态函数的特性,在静态函数中实例化 DateDialog 类,并调用dialog.exec()函数来显式执行对话框。通过 dialog.exec()的返回值来判断用户单击的是Ok按钮还是Cancel按钮,然后做出下一步判断。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    mydialog = new Dialog(this);

    int result = mydialog->exec();
    QString x, y, z, a, b, c;
    std::tuple<QString, QString, QString, QString, QString, QString> mydatetime= mydialog->dateTime();

    mydialog->close();
//    qDebug()<<result;

    if (result== QDialog::Accepted)
    {
        ui->lineEdit->setText(std::get<0>(mydatetime) + std::get<1>(mydatetime) + std::get<2>(mydatetime) + std::get<3>(mydatetime)+ std::get<4>(mydatetime)+std::get<5>(mydatetime) );
        qDebug()<<"Press OK";
    }
    else
    {
        ui->lineEdit->clear();
        qDebug()<<"Press Cancel";
    }

}

void MainWindow::on_pushButton_2_clicked()
{
    std::tuple<QString, QString, QString, QString, QString, QString, int> datetime = Dialog::static_MyDatetime();// 这里直接由静态函数返回dialog里是按下了哪一个

    if (std::get<6>(datetime) == QDialog::Accepted)
    {
        qDebug()<<"Press OK";
        ui->lineEdit->setText(std::get<0>(datetime) + std::get<1>(datetime) + std::get<2>(datetime) + std::get<3>(datetime)+ std::get<4>(datetime)+std::get<5>(datetime) );
    }
    else
    {
        ui->lineEdit->clear();
        qDebug()<<"Press Cancel";
    }

}

第一个按钮的槽函数与下面按钮2的槽函数的区别是dialog的实例化是放在槽函数里,后面那个是放在调用的静态成员函数里。

C++函数返回多个返回值。std::tuple

静态成员函数实例化本类。
Dialog* yakeDialog = new Dialog();
int result = yakeDialog->exec();

对话框窗口实现代码如下所示:?

#include "dialog.h"
#include "ui_dialog.h"

std::tuple<QString, QString, QString, QString, QString, QString, int> Dialog::static_MyDatetime()
{

    Dialog* yakeDialog = new Dialog();
    int result = yakeDialog->exec();

    auto [x, y, z, a, b, c]  = yakeDialog->dateTime();// Call function  and return.

    return { x, y, z, a, b, c, result};
}

std::tuple<QString, QString, QString, QString, QString, QString> Dialog::dateTime()
{
    return {  ui->dateTimeEdit->sectionText(QDateTimeEdit::YearSection),
                  ui->dateTimeEdit->sectionText(QDateTimeEdit::MonthSection),
                  ui->dateTimeEdit->sectionText(QDateTimeEdit::DaySection),
                  ui->dateTimeEdit->sectionText(QDateTimeEdit::HourSection),
                  ui ->dateTimeEdit->sectionText(QDateTimeEdit::MinuteSection),
                  ui->dateTimeEdit->sectionText(QDateTimeEdit::SecondSection)

    };
}

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    this->setWindowTitle("DateDialog");

    ui->dateTimeEdit->dateTime().setDate(QDate::currentDate());
    ui->dateTimeEdit->dateTime().setTime(QTime::currentTime());

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_buttonBox_accepted()
{
    // 各部分对应的值
    QString strYear =        ui->dateTimeEdit->sectionText(QDateTimeEdit::YearSection);
    QString strMonth =    ui->dateTimeEdit->sectionText(QDateTimeEdit::MonthSection);
    QString strDay =         ui->dateTimeEdit->sectionText(QDateTimeEdit::DaySection);
    QString strHour =       ui->dateTimeEdit->sectionText(QDateTimeEdit::HourSection);
    QString strMinute =   ui->dateTimeEdit->sectionText(QDateTimeEdit::MinuteSection);
    QString strSecond =  ui->dateTimeEdit->sectionText(QDateTimeEdit::SecondSection);


    qDebug() << "Year : " << strYear;
    qDebug() << "Month : " << strMonth;
    qDebug() << "Day : " << strDay;
    qDebug() << "Hour : " << strHour;
    qDebug() << "Minute : " << strMinute;
    qDebug() << "Second : " << strSecond;
}

void Dialog::on_buttonBox_rejected()
{
    ui->dateTimeEdit->clear();
}

在静态函数中实例化本 Dialog 类,并调用dialog.exec()函数来显式执行对话框。通过 dialog.exec()的返回值来判断用户单击的是Ok按钮还是Cancel按钮,然后做出下一步判断。

3.多窗口数据传输:自定义信号与槽

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:34:46  更:2021-12-23 15:35:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:31:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码