首页 > 其他分享 >记录解决QT父子窗口互传值、一些数据类型转换问题

记录解决QT父子窗口互传值、一些数据类型转换问题

时间:2024-07-15 14:42:40浏览次数:15  
标签:类型转换 QT int void char QTableWidgetItem 互传 QString ui

@

目录

一、父子窗口互相传值

①父向子窗口传递值

父.h

private slots:
    void on_btnMore_clicked();
signals:
    void sendStr(QTableWidgetItem*,QTableWidgetItem*,QTableWidgetItem*);

父.cpp

connect(btnMore, SIGNAL(clicked()), this, SLOT(on_btnMore_clicked()), Qt::UniqueConnection);//防止重复调用

void Test::on_btnMore_clicked()
{
	OKFlag = 0;
    testDialog->setModal(true);
    if(OKFlag == 0)
    	connect(paramDialog,SIGNAL(sendNewStr(QString)),this,SLOT(getNewStr(QString)));
   	QObject* obj = sender();
    if (obj != nullptr)
    {
        // 获取该单元格对应的数据
        item1 = ui->tableWidget->item(row, 1);
        item2 = ui->tableWidget->item(row, 2);
        item3 = ui->tableWidget->item(row, 3);
        QObject::connect(this,SIGNAL(sendStr(QTableWidgetItem*,QTableWidgetItem*,QTableWidgetItem*)),paramDialog,SLOT(getStr(QTableWidgetItem*,QTableWidgetItem*,QTableWidgetItem*)));
        if (item1 != nullptr && item2 != nullptr && item3 != nullptr)
        {
            emit sendStr(item1,item2,item3);
            disconnect(this,SIGNAL(sendStr(QTableWidgetItem*,QTableWidgetItem*,QTableWidgetItem*)),paramDialog,SLOT(getStr(QTableWidgetItem*,QTableWidgetItem*,QTableWidgetItem*)));
        }
    }
    paramDialog->show();
}

子.h

private slots:
    void getStr(QTableWidgetItem*,QTableWidgetItem*,QTableWidgetItem*);

子.cpp

void TestDialog::getStr(QTableWidgetItem* item1,QTableWidgetItem* item2,QTableWidgetItem* item3)
{
    ui->tableWidget->setColumnWidth(0, 200);//设置固定宽度
    ui->Text->setText(item1->text());
    ui->describeText->setText(item2->text());
	QStringList show0 = item3->text().split('_');
	……
}

②子向父窗口传递值

子.h

signals:
    void sendNewStr(QString);
private slots:
    void on_OKButton_clicked();

子.cpp

void TestDialog::on_OKButton_clicked()
{
    OKFlag = 1;
    rowNum0 = 0, rowNum1 = 0;
    QString newstr = ui->currentNum->text();
    emit sendNewStr(newstr);
    ui->tableWidget->clearContents();
}

父.h

private slots:
    void getNewStr(QString);

父.cpp

void Test::getNewStr(QString newstr)
{
    int row = ui->tableWidget->currentItem()->row();//当前选中行
    QTableWidgetItem *GetNewStr = new QTableWidgetItem(newstr);
    ui->tableWidget->setItem(row,4,GetNewStr);
    if(OKFlag == 1)
        disconnect(paramDialog,SIGNAL(sendNewStr(QString)),this,SLOT(getNewStr(QString)));
    this->show();
    testDialog->hide();
}

相关解决方法可借鉴网址如下:
Qt 主窗口与子窗口之间传值
QT窗体之间值的传递,多种方法实现

二、数据类型转换

①int转QString

QString str1 = QString("%1").arg(12, 4, 16, QChar('0'));
QString str2 = QString("%1").arg(12, 4, 10, QChar('0'));

②int转16进制

int value =12;
QString str = QString::number(value, 16);// 最小位数
QString str2 =  QString("%1").arg(value,4,16,QLatin1Char('0'));//value为int型或char型都可,固定位数

③QString转unsigned char

unsigned char slaveAddChange = ui->spinBoxStation->text().toUtf8().toUInt();
QString  IDSplit0 = ID.split('-').at(0);
unsigned char IDHSend = IDSplit0.toInt(nullptr,16);

④ unchar转QString

unsigned char buf[8];
uncharToQstring(buf,8);
void ParameterPanel::uncharToQstring(unsigned char * id,int len)
{
    QString temp,msg;
    int j = 0;

    while (j<len)
    {
        temp = QString("%1").arg((int)id[j], 2, 16, QLatin1Char('0'));
        msg.append(temp);
        j++;
    }
}

⑤char转int

char charFour[4];
int charInt= CharToIntTable(charFour,4);
int CharToIntTable(char * bytesCharFour,int length)
{
    int b[20] = { 0 };//将十六进制数转成int类型
    int c = 0;//最终的十进制数
    for(int i = 0; i < length; i++)//将其从char类型转成int类型,并存入数组b[]中
    {
        if ((*(bytesCharFour+i) >= 'a') && (*(bytesCharFour+i) <= 'f'))
        {
            b[i] = *(bytesCharFour+i) - 'a' + 10;
        }
        if ((*(bytesCharFour+i) >= '0') && (*(bytesCharFour+i) <= '9'))
        {
            b[i] = *(bytesCharFour+i) - '0';
        }
    }
    //将每一位都转成16进制
    for(int i = 0; i < length; i++)//十进制转十六进制和十六进制转十进制是互逆的
    {
        b[i] = b[i] * pow( 16 , (length -1 - i));
    } 
    for (int j = 0;j<length;j++)//直接累加
    {
        c += b[j];
    }
    return c;
}

⑥QByteArray转16进制

QByteArray bytes;
bytes = port1->readAll();
QByteArray bytesHEX = bytes.toHex();

相关解决方法可借鉴网址如下:
关于QByteArray存储十六进制 与十六进制互转
Qt中QString与int,char等互转

标签:类型转换,QT,int,void,char,QTableWidgetItem,互传,QString,ui
From: https://www.cnblogs.com/gonghangxiubai/p/18303115

相关文章

  • Qt UI线程中使用QThread::sleep有什么影响
    在Qt中,QThread::sleep 是一个静态函数,用于让当前线程休眠指定的时间,以实现线程暂停的目的。当在UI线程中调用 QThread::sleep 函数时,会导致UI线程在指定的时间内被阻塞,即界面无法响应用户的操作,直到休眠时间结束。因此,在UI线程中使用 QThread::sleep 可能会导致界面冻结,影响......
  • Java基础05:类型转换
    由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级(根据容量来看)。低------------------------------------------>高byte,short,char—>i......
  • java-隐式转换(自动类型提升)与强制类型转换
    前言在学习运算符的时候会遇到两个名词,一个是隐式类型转换,一个是强制类型转换隐式类型转换也就是取值范围小的数值赋值给取值范围大的变量inta=10;doubleb=a;强制类型转换就是将取值范围大的一个数值直接赋值给取值范围小的变量doubleb=10......
  • Qt Creator导入不同Qt版本
    1.下载好想要使用的Qt版本2.3.添加Qt版本、编译器和调试器4.名称自己设置,选择好上面添加的编译器,调试器和Qt版本即可......
  • Qt-动态库
    前言1.本文中所有的代码案例使用Qt创建,CMake构建、Windows端使用MinGW编译、Linux端使用GNU编译。2.完整的代码示例在绑定的资源中,审核通过后,大家可以免费下载。一库简介1.库是将一些写好的函数和变量代码整合在一起,编译生成库文件,以提供给程序使用。作用是为了复用代......
  • Qt-线程和线程池
    前言Qt实现在线程中执行任务有4种方法,分别是:1. 创建一个派生于QThread类的子类,重写run函数,在run函数中执行任务2.创建一个派生于QObject的子类,调用QObject::moveToThread()方法将子类对象移动到子线程对象中。3.使用线程池QThreadPool4.使用QtConcurrent执行并......
  • C++客户端Qt开发——开发环境
    一、QT开发环境1.安装三个部分①C++编译器(gcc,cl.exe……)②QTSDKSDK-->软件开发工具包比如,windows版本QTSDK里已经内置了C++的编译器(内置编译器是mingw,windows版本的gcc/g++)③QT的集成开发环境(IDE)官方提供的QTCreator最容易入门,最容易上手的方式,开箱即用,虽然QTCrea......
  • 【Qt 信号和槽】一篇文章带你详细的了解 Qt 的信号与槽
    文章目录1.信号和槽的基本概念2.`connect()`函数的用法......
  • Qt-事件过滤器、事件分发器、事件处理器
    前言Qt中事件的处理步骤1.当事件产生之后,Qt应用程序对象通过调用QApplication::notify()函数将事件发送到指定的窗口。2.事件在发送过程中可以通过向对象(窗口、按钮等)安装事件过滤器QObject::eventFilter()来对事件进行过滤。Qt应用程序默认不对任何产生的事件......
  • MQTT是什么,物联网
    写文思路:以下从几个方面介绍MQTT,包括:MQTT是什么,MQTT和webSocket的结合,以及使用场景,一、MQTT是什么MQTT(MessageQueuingTelemetryTransport)是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网(IoT)设备之间的通信。MQTT在设计时考虑了低带宽、不可靠网络环境下的高效......