前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt父窗口与子窗口数据交互(用拾色器举例)

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

作者头像
花狗Fdog
发布2020-10-28 11:35:51
2.9K0
发布2020-10-28 11:35:51
举报
文章被收录于专栏:花狗在Qt

一.效果图

在这里插入图片描述
在这里插入图片描述

二.实现

首先我们创建主窗口和子窗口,并拖动控件,完成基本界面。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

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

然后就是敲代码了:

1.在子窗口中声明信号

colorform.h

代码语言:javascript
复制
signals:
    void GetUdpLogMsg(QString msg);

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

mainwindow.h

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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中的:

代码语言:javascript
复制
//这里的构造函数传入了子窗口需要主窗口提供的数据ui->lineEdit_2->text()
cp = new ColorForm(0,ui->lineEdit_2->text());
cp->show();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.效果图
  • 二.实现
    • 1.在子窗口中声明信号
      • 2.在主窗口中声明并实现槽函数,并进行信号与槽的绑定
        • 3.在子窗口中发送信号(emit),并完成其控件的相应
          • 4.在子窗口的构造函数中传入需要的主窗口数据
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档