Qt窗口交互场景、子窗口数据获取

news2024/9/19 9:38:14

一、前言

在现代软件开发中,图形用户界面(GUI)的设计不仅仅关乎美观,更在于用户体验和功能的无缝衔接。Qt框架以其强大的跨平台能力和丰富的组件库,成为众多开发者构建GUI应用的首选工具。在Qt应用中,窗口之间的交互和数据传递是构建复杂用户流程的关键,尤其在需要从子窗口获取数据并在主窗口或另一个窗口中展示的情境下,这一过程变得尤为突出。

一个典型的场景:主窗口A作为应用的入口,引导用户进入子窗口B以输入特定信息。当用户完成输入并确认后,B窗口将关闭,同时确保A窗口能够捕获并处理这些数据。随后,A窗口将基于所获取的信息,弹出C窗口以直观展示结果,为用户提供即时反馈。这一流程不仅体现了Qt框架中窗口通信的灵活性,也展现了其在构建响应式、交互式应用方面的强大能力。

image-20240715154639962

二、实现代码

在Qt中,窗口间的通信和数据传递可以通过信号与槽机制实现。以下是一个使用Qt框架的C++代码示例,展示如何从一个数据输入窗口(B窗口)获取用户输入的信息,然后在主窗口(A窗口)中显示这些信息,并最终在另一个窗口(C窗口)中以表格的形式呈现出来。

首先,需要创建三个类:MainWindow(A窗口)、InputDialog(B窗口)和DisplayWindow(C窗口)。这里使用QDialog作为B和C窗口的基础,而A窗口则使用QWidget。将使用QTableWidget在C窗口中展示数据。

步骤1:创建MainWindow

MainWindow类包含了一个按钮,用于触发弹出InputDialog,以及一个槽函数用于接收数据并显示DisplayWindow

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void showInputDialog();
    void handleDataFromInputDialog(const QMap<QString, QString> &data);

private:
    QPushButton *m_button;
};

步骤2:实现MainWindow

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    m_button = new QPushButton("Open Input Dialog", this);
    connect(m_button, &QPushButton::clicked, this, &MainWindow::showInputDialog);
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(m_button);
}

MainWindow::~MainWindow()
{
}

void MainWindow::showInputDialog()
{
    InputDialog *inputDialog = new InputDialog(this);
    connect(inputDialog, &InputDialog::dataReady, this, &MainWindow::handleDataFromInputDialog);
    inputDialog->exec();
}

void MainWindow::handleDataFromInputDialog(const QMap<QString, QString> &data)
{
    DisplayWindow *displayWindow = new DisplayWindow(data, this);
    displayWindow->show();
}

步骤3:创建InputDialog

InputDialog类是一个简单的对话框,包含文本输入字段,用于收集用户数据。

class InputDialog : public QDialog
{
    Q_OBJECT

public:
    InputDialog(QWidget *parent = nullptr);

signals:
    void dataReady(QMap<QString, QString> data);

private slots:
    void accept();

private:
    QLineEdit *m_nameInput;
    QLineEdit *m_ageInput;
};

步骤4:实现InputDialog

InputDialog::InputDialog(QWidget *parent)
    : QDialog(parent)
{
    m_nameInput = new QLineEdit(this);
    m_ageInput = new QLineEdit(this);

    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(new QLabel("Name:", this));
    layout->addWidget(m_nameInput);
    layout->addWidget(new QLabel("Age:", this));
    layout->addWidget(m_ageInput);
    QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    layout->addWidget(buttonBox);
    connect(buttonBox, &QDialogButtonBox::accepted, this, &InputDialog::accept);
    connect(buttonBox, &QDialogButtonBox::rejected, this, &InputDialog::reject);
}

void InputDialog::accept()
{
    QMap<QString, QString> data;
    data["Name"] = m_nameInput->text();
    data["Age"] = m_ageInput->text();
    emit dataReady(data);
    QDialog::accept();
}

步骤5:创建DisplayWindow

DisplayWindow类将接收数据并通过QTableWidget显示出来。

class DisplayWindow : public QDialog
{
    Q_OBJECT

public:
    explicit DisplayWindow(const QMap<QString, QString> &data, QWidget *parent = nullptr);

private:
    QTableWidget *m_tableWidget;
};

步骤6:实现DisplayWindow

DisplayWindow::DisplayWindow(const QMap<QString, QString> &data, QWidget *parent)
    : QDialog(parent)
{
    m_tableWidget = new QTableWidget(this);
    m_tableWidget->setRowCount(data.size());
    m_tableWidget->setColumnCount(2);
    m_tableWidget->setHorizontalHeaderLabels(QStringList() << "Field" << "Value");

    int row = 0;
    for (auto it = data.begin(); it != data.end(); ++it) {
        QTableWidgetItem *keyItem = new QTableWidgetItem(it.key());
        QTableWidgetItem *valueItem = new QTableWidgetItem(it.value());
        m_tableWidget->setItem(row, 0, keyItem);
        m_tableWidget->setItem(row, 1, valueItem);
        ++row;
    }

    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(m_tableWidget);
}

步骤7:在main.cpp中实例化MainWindow并启动应用

#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec();
}

以上代码示例展示了如何在Qt中使用信号与槽机制来实现在窗口间传递数据,以及如何使用QTableWidget来展示这些数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​

目录 微机原理判断指令是否正确【见的多了&#xff0c;你就懂了~】 1. 立即数不能作为目标操作数 2. 操作数位数必须匹配 3. 需要指定存储器操作数的字节或字 4. 两个操作数不能同时为存储器操作数 5. 循环次数超过1必须使用CL寄存器 6. 段寄存器限制&#xff08;特别是…

比OpenAI的Whisper快50%,最新开源语音模型

生成式AI初创公司aiOla在官网开源了最新语音模型Whisper-Medusa&#xff0c;推理效率比OpenAI开源的Whisper快50%。 aiOla在Whisper的架构之上进行了修改采用了“多头注意力”机制的并行计算方法&#xff0c;允许模型在每个推理步骤中预测多个token&#xff0c;同时不会损失性…

[000-01-010].第02节:Spring基础开发环境搭建

1.1.新建空项目&#xff1a; 1.新建Empty项目&#xff0c;主要是为了方便之后把各个模块的代码统一的放在一起&#xff1a; 2.设置JDK&#xff1a; 3.设置maven版本&#xff1a; 1.2.建立第一个Spring项目模块&#xff1a; 1.新建模块&#xff1a; 2.配置依赖&#xff…

gitlab自动部署是什么 gitlab自动部署如何进行操作

在现代软件开发流程中&#xff0c;自动化部署是提高效率和确保软件质量的关键环节。GitLab作为一个强大的DevOps平台&#xff0c;提供了完整的自动部署工具&#xff0c;帮助开发团队实现代码从编写到生产的无缝转换。本文将详细解析GitLab的自动部署功能是什么&#xff0c;如何…

走向绿色:能源新选择,未来更美好

当前&#xff0c;全球范围内可再生能源正经历着从辅助能源向核心能源的深刻转型&#xff0c;绿色能源日益渗透至居住、出行、日常应用等多个领域&#xff0c;深刻影响着我们的生活方式&#xff0c;使我们能够更加充分地体验清洁能源所带来的优质生活。 一、绿色能源与“住” …

Fluent学习笔记——催化转化器内流场仿真(含多孔介质)

参考课程&#xff1a; 标题&#xff1a;【ANSYS Fluent教程|流体仿真基础入门105讲&#xff08;官方最新案例讲解&#xff09;】 作者&#xff1a;仿真秀APP 选集&#xff1a;P35-P40https://www.bilibili.com/video/BV1vT4y1z7on?p35&vd_source7e977d0187273d77005659cdd…

数据结构(03):线性表的逻辑结构

线性表的逻辑结构 在谈论逻辑结构的时候&#xff0c;我们不讨论具体数据在物理内存中的存储细节&#xff0c;而只关注线性表的逻辑结构。数据结构系列文章02介绍过常见的逻辑结构有&#xff1a;集合、线性表结构、树结构和图结构等。 A.What&#xff08;什么是线性表&#xff0…

什么是凤凰雪球期权?和雪球期权有什么区别?

凤凰结构&#xff0c;和经典雪球结构类似&#xff0c;属于障碍期权的一种。凤凰结构中包括敲入事件&#xff0c;也包括敲出事件&#xff0c;最后的收益取决于挂钩标的走势和敲入、敲出事件发生的时间&#xff0c;不过在收益计算规则上与雪球有所不同&#xff0c;下文为大家科普…

deepin V23 Release 安装与功能介绍!!!

原文链接&#xff1a;deepin V23 Release 安装与功能介绍&#xff01;&#xff01;&#xff01; Hello&#xff0c;大家好啊&#xff01;2024年8月15日&#xff0c;deepin正式发布了最新版操作系统——deepin V23。今天&#xff0c;我将为大家带来一篇关于deepin V23的安装及功…

python完整爬取工商数据代码实例+数据展示

在数据爬虫这个领域&#xff0c;我早已不再是新手&#xff0c;而是一位经验丰富的老手。长期以来&#xff0c;我通过不断实践和探索&#xff0c;掌握了一系列高效的爬虫技术&#xff0c;特别是在应对复杂网页和动态数据时&#xff0c;更是积累了独特的经验。 初识爬虫&#xf…

SAP BRIM用于应收账款AR收入中台

SAP BRIM&#xff08;Billing and Revenue Innovation Management&#xff09;是SAP提供的一个综合性解决方案&#xff0c;旨在帮助企业高效管理计费和收入流程。它与SAP ERP系统集成&#xff0c;提供端到端的功能&#xff0c;简化计费流程&#xff0c;自动化收入确认&#xff…

【云原生】Ingress控制器超级详解

Ingress资源对象 文章目录 Ingress资源对象一、Ingress1.1、Ingress是什么&#xff1f;1.2、Ingress术语1.3、Ingress类型 二、Ingress详细2.1、部署Nginx-Ingress控制器2.2、最小Ingress资源2.3、Ingress规则 三、一个域名多个访问路径多SVC四、多域名Ingress五、转发到默认Se…

基于Java+SpringBoot+Vue的网上购物商城系统研发

基于JavaSpringBootVue的网上购物商城系统研发 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f3…

排序算法【希尔排序】

一、原理 &#xff08;1&#xff09;步长为4时候的插入排序 &#xff08;2&#xff09;步长为2的时候的插入排序 &#xff08;3&#xff09;步长为1的时候的插入排序 二、代码如下所示&#xff1a; #ifndef __TEST_H__ #define __TEST_H__ #include <string.h> #include…

【IEEE出版,华中科技大学主办】2024年电气工程自动化与信息处理国际会议(EEAIP 2024,9月20-22)

2024年电气工程自动化与信息处理国际会议&#xff08;EEAIP 2024&#xff09;作为第四届能源、动力与电气工程国际学术会议&#xff08;EPEE 2024&#xff09;的分会场&#xff0c;将于2024年9月20-22日在中国武汉举行。 本届主会&#xff08;EPEE 2024&#xff09;由华中科技大…

【Python - 爬虫】SSLError 错误:处理 HTTPS 请求中的 SSLError 问题

文章目录 一、SSLError 错误概述1. 错误的产生2. 常见的错误信息 二、SSLError 的可能原因分析1. 代理配置问题2. 网络传输问题3. 证书问题 三、解决方案与最佳实践1. 配置代理2. 通过系统代理3. 使用 requests.Session 管理请求4. 临时禁用代理 四、其他解决方法1. 更新证书2.…

4.4 数据查询语言(DQL):复杂查询与连接操作

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

【Redis】Redis典型应用-分布式锁

目录 什么是分布式锁&#xff1f; 分布式锁的基础实现 引入过期事件 引入校验ID 引入lua 引入watch dog&#xff08;看门狗&#xff09; 引⼊ Redlock 算法 什么是分布式锁&#xff1f; 在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要…

访非洲 助公益 促和平 朱共山妻子杨燕女士勇担社会责任

作为协鑫集团董事长朱共山先生的夫人&#xff0c;杨燕女士一直以其卓越的社会责任感和对公益事业的热忱著称。近些年&#xff0c;杨燕女士前往非洲访问&#xff0c;旨在加强中非之间的友好交流&#xff0c;支持我国传统书画事业发展&#xff0c;并促进地区的和平与稳定。朱共山…

AI大模型入门基础教程(非常详细),AI大模型入门到精通,收藏这一篇就够了!

什么是 AI大模型&#xff1f; AI大模型是指使用大规模数据和强大的计算能力训练出来的人工智能模型。 这些模型通常具有高度的准确性和泛化能力&#xff0c;可以应用于各种领域&#xff0c;如自然语言处理、图像识别、语音识别等。 为什么要学AI大模型&#xff1f; 2024人工…