Qt父窗口与子窗口数据交互(用拾色器举例)

简介: Qt父窗口与子窗口数据交互(用拾色器举例)

在这里插入图片描述


@[TOC]


一.效果图

在这里插入图片描述


二.实现

首先我们创建主窗口和子窗口,并拖动控件,完成基本界面。
在这里插入图片描述
在这里插入图片描述

这里的布局以及按钮的样式表的实现不在列出,有需要可阅读博主下面两篇博文:

小提示:拖拽的lineEdit的组件编译后可能是可修改状态,只需要在该控件属性栏中找到readOnly打对勾即可。

主窗口和子窗口创建好后,就要进行数据交互了,再敲代码之前,读者应了解实现交互的步骤:

  • 1.在子窗口中声明信号
  • 2.在主窗口中声明并实现槽函数,并进行信号与槽的绑定
  • 3.在子窗口中发送信号(emit)
  • 4.在子窗口的构造函数中传入需要的主窗口数据

然后就是敲代码了:

1.在子窗口中声明信号

colorform.h

signals:
    void GetUdpLogMsg(QString msg);

2.在主窗口中声明并实现槽函数,并进行信号与槽的绑定

mainwindow.h

private slots:
    void on_pushButton_2_clicked();
    void PrintLogMsg_font(QString msg);
    void PrintLogMsg_backgroud(QString msg);
    void PrintLogMsg_border(QString msg);
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_5_clicked();

槽函数中的参数就是子窗口传给父窗口的数据,这个数据由子窗口的信号获得
mainwindow.cpp

void MainWindow::PrintLogMsg_font(QString msg)
{
    ui->lineEdit->setText(msg);
    QString str = QString("background:%1;border-radius:4px;").arg(msg);
    ui->pushButton_3->setStyleSheet(str);
}
void MainWindow::PrintLogMsg_backgroud(QString msg)
{
    ui->lineEdit_2->setText(msg);
    QString str = QString("background:%1;border-radius:4px;").arg(msg);
    ui->pushButton_4->setStyleSheet(str);
}

void MainWindow::PrintLogMsg_border(QString msg)
{
    ui->lineEdit_3->setText(msg);
    QString str = QString("background:%1;border-radius:4px;").arg(msg);
    ui->pushButton_5->setStyleSheet(str);
}

void MainWindow::on_pushButton_3_clicked() //字体颜色
{
    cp = new ColorForm(0,ui->lineEdit->text());
    cp->show();
    connect(cp,SIGNAL(GetUdpLogMsg(QString)),this,SLOT(PrintLogMsg_font(QString)));
}

void MainWindow::on_pushButton_4_clicked() //背景颜色
{
    cp = new ColorForm(0,ui->lineEdit_2->text());
    cp->show();
    connect(cp,SIGNAL(GetUdpLogMsg(QString)),this,SLOT(PrintLogMsg_backgroud(QString)));
}

void MainWindow::on_pushButton_5_clicked()//边框颜色
{
    cp = new ColorForm(0,ui->lineEdit_3->text());
    cp->show();
    connect(cp,SIGNAL(GetUdpLogMsg(QString)),this,SLOT(PrintLogMsg_border(QString)));
}

3.在子窗口中发送信号(emit),并完成其控件的相应

colorform.h

void ColorForm::on_pushButton_clicked() //确定
{
    emit GetUdpLogMsg(ui->lineEdit_4->text());
    this->close();
}
void ColorForm::on_pushButton_2_clicked() //关闭
{
    this->close();
}

void ColorForm::on_horizontalSlider_valueChanged(int value)
{
    ui->lineEdit->setText(QString::number(value));
    QString str = QString("background:rgb(%1,%2,%3)").arg(ui->horizontalSlider->value()).arg(ui->horizontalSlider_2->value()).arg(ui->horizontalSlider_3->value());
    ui->label_3->setStyleSheet(str);

    QString str_2 = QString("#%1%2%3").arg(ui->horizontalSlider->value(),2,16,QChar('0')).arg(ui->horizontalSlider_2->value(),2,16,QChar('0')).arg(ui->horizontalSlider_3->value(),2,16,QChar('0'));
    qDebug()<<str_2;
    ui->lineEdit_4->setText(str_2);
}

void ColorForm::on_horizontalSlider_2_valueChanged(int value)
{
    ui->lineEdit_2->setText(QString::number(value));
    QString str = QString("background:rgb(%1,%2,%3)").arg(ui->horizontalSlider->value()).arg(ui->horizontalSlider_2->value()).arg(ui->horizontalSlider_3->value());
    ui->label_3->setStyleSheet(str);

    QString str_2 = QString("#%1%2%3").arg(ui->horizontalSlider->value(),2,16,QChar('0')).arg(ui->horizontalSlider_2->value(),2,16,QChar('0')).arg(ui->horizontalSlider_3->value(),2,16,QChar('0'));
    qDebug()<<str_2;
    ui->lineEdit_4->setText(str_2);
}

void ColorForm::on_horizontalSlider_3_valueChanged(int value)
{
    ui->lineEdit_3->setText(QString::number(value));
    QString str = QString("background:rgb(%1,%2,%3)").arg(ui->horizontalSlider->value()).arg(ui->horizontalSlider_2->value()).arg(ui->horizontalSlider_3->value());
    ui->label_3->setStyleSheet(str);

    QString str_2 = QString("#%1%2%3").arg(ui->horizontalSlider->value(),2,16,QChar('0')).arg(ui->horizontalSlider_2->value(),2,16,QChar('0')).arg(ui->horizontalSlider_3->value(),2,16,QChar('0'));
    qDebug()<<str_2;
    ui->lineEdit_4->setText(str_2);
}

4.在子窗口的构造函数中传入需要的主窗口数据

注意2中的:

//这里的构造函数传入了子窗口需要主窗口提供的数据ui->lineEdit_2->text()
cp = new ColorForm(0,ui->lineEdit_2->text());
cp->show();

相关文章
|
3月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
770 3
|
10天前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
3月前
|
JSON 网络协议 开发工具
基于Qt实现的TCP端口数据转发服务器
基于Qt实现的TCP端口数据转发服务器
45 0
基于Qt实现的TCP端口数据转发服务器
|
3月前
|
SQL 缓存 网络协议
利用QT实现多平台数据互通
利用QT实现多平台数据互通
|
3月前
|
Linux Windows
imx6ull开发板之qt应用编程读取AP3216c(光照,距离)数据。
imx6ull开发板之qt应用编程读取AP3216c(光照,距离)数据。
44 0
|
3月前
|
JSON JavaScript 前端开发
C++ Qt开发:运用QJSON模块解析数据
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QJson`组件的实现对JSON文本的灵活解析功能。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,也易于机器解析和生成。该格式是基于JavaScript语言的一个子集,但它是一种独立于语言的数据格式,因此可以在许多不同的编程语言中使用。
100 0
C++ Qt开发:运用QJSON模块解析数据
|
3月前
|
存储 设计模式 数据库
C++ Qt开发:StandardItemModel数据模型组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`StandardItemModel`数据模型组件的常用方法及灵活运用。 `QStandardItemModel` 是 Qt 中用于存储标准项数据的模型类之一,它继承自 `QAbstractItemModel` 类。这个模型提供了一种灵活的方式来组织和管理数据,适用于各种视图类(比如 `QTreeView`、`QListView`、`QTableView` 等)。该组件是标准的以项数据为单位的基于M/V模型的
71 0
C++ Qt开发:StandardItemModel数据模型组件
|
3月前
|
存储 JSON JavaScript
[Qt5] QJson库进行存储、加载数据
[Qt5] QJson库进行存储、加载数据
31 0
|
3月前
|
算法 编译器
[C++&Qt] 通过信号与槽传递数据
[C++&Qt] 通过信号与槽传递数据
89 0
|
10月前
|
索引
【Qt上位机】打开本地表格文件并获取其中全部数据
本文给出了利用Qt编写一个上位机,实现打开本地表格文件,获取表格总行列数,操作单个单元格以及获取全部单元格内容并输出的解决办法,仅供参考。
102 1