QT 格式化字符串功能
【生活经历分享】华师国培 华师伴学 合同都是坑 消费者付款后无法退款
和华师国培签合同需小心,合同中都是保护华师的条款,没有保护消费者的条款。
收到钱,就算你因对培训质量不满意,也不能退款。因合同消费者维权肯定十分艰难。
华师伴学的授课方式是看录制的视频,不是真人现场教学。是否是您和孩子想要的学习方式?
各位打算报名的,交费要谨慎!
其他人在小红书上发的,转:
深圳市华师国培教育科技有限公司,黑心机构,大家擦亮眼睛,别被骗了,消费欺诈,虚假承诺,签合同各种坑,收到钱了不履行承诺不退款,乱扣费,维权艰难! - 小红书
直接想到使用 sprintf(),写出如下的代码:
1 void MainWindow::formatSerInfo(void) 2 { 3 QString strTest("Tst"); 4 QString strSerInfo; 5 strSerInfo.sprintf("%s %d",strTest,m_baudRateCur); 6 hintSerSts->setText(strSerInfo); 7 }
编译直接报错,错误信息如下:
C:\Qt\QtPrj\SerialAssist\mainwindow.cpp:427: error: cannot pass objects of non-trivially-copyable type 'class QString' through '...'
strSerInfo.sprintf("%s %d",strTest,m_baudRateCur);
C:\Qt\QtPrj\SerialAssist\mainwindow.cpp:427: warning: format '%s' expects argument of type 'char*', but argument 3 has type 'QString' [-Wformat=]
不支持 QString 的 sprintf, 使用起来最是不方便!
QString 转 char * 还是比较麻烦的:
先将 QString 转换为 QByteArray,再将 QByteArray 转换为 char *。
注意:不能用下面的转换形式 char *mm = str.toLatin1().data(); 。因为这样的话,str.toLatin1() 得到的 QByteArray 类型结果就不能保存,最后转换,mm 的值就为空。
示例:
1 Qstring str; 2 char *ch; 3 QByteArray ba = str.toLatin1(); 4 ch = ba.data();
这样就完成了 QString 向 char * 的转化。经测试程序运行时不会出现 Bug。
注意第三行,一定要加上,不可以 str.toLatin1().data() 这样一部完成,可能会出错。
所以上述代码最后修改为:
1 void MainWindow::formatSerInfo(void) 2 { 3 QString strTest("Tst"); 4 QString strSerInfo; 5 QByteArray baTmp = strTest.toLatin1(); 6 strSerInfo.sprintf("%s %d",baTmp.data(),m_baudRateCur); 7 hintSerSts->setText(strSerInfo); 8 }
或者,使用 arg 方法:
1 void MainWindow::formatSerInfo(void) 2 { 3 QString strTest("Tst"); 4 QString strSerInfo; 5 strSerInfo = QString("%1 %2").arg(strTest).arg(m_baudRateCur); 6 hintSerSts->setText(strSerInfo); 7 }
在 QT 中,建议使用后面方法,即 arg() 的方法。

浙公网安备 33010602011771号