前言
下面是利用VS+QT在开发上位机出现的一些问题,为了方便后续开发中能快速找到这些问题的解决路径,所以写在这里,方便查找。
QT美化类
1. 在VS+QT环境下中文乱码的问题
这个问题是在我利用一个按钮控件来打开一个串口,在没有串口时需要弹出一个“串口未找到,请重试!”的串口提示,于是我在代码里写了如下语句:
QString serialport_name = ui.comboBox_serialport_num->currentText();
if (current_name.isEmpty())
{
qDebug() << "串口未找到,请重试!" << endl;
QMessageBox::critical(this, tr("错误"), tr("串口未找到,请重试!"), QMessageBox::Ok, QMessageBox::NoButton);
return;
}
在编译运行时我按下打开按钮时却出现界面提示:
同时,在VS调试输出界面也是乱码:
显然这不是想要的输出结果,目前解决方法也很多,这方法目前也是我在用的就是在其头文件加上“#pragma execution_character_set(“utf-8”)”语句,加上后问题解决。
2.改变Combox类下拉框的长度
我利用Combox来显示串口号,于是做了一个定时任务来获取目前插在电脑的外设设备,然后放在该控件中,代码如下:
void MainWidget::slot_deal_serialport_timeout_deal()
{
static QStringList oldstringlist;
QStringList newstringlist;
foreach(const QSerialPortInfo &serial_info,QSerialPortInfo::availablePorts())
{
//qDebug() << "Name : " << serial_info.portName();
//qDebug() << "Description : " << serial_info.description();
//qDebug() << "Manufacturer: " << serial_info.manufacturer();
newstringlist += serial_info.portName();
}
if (oldstringlist.size() != newstringlist.size())
{
oldstringlist = newstringlist;
ui.comboBox_serialport_num->clear();
ui.comboBox_serialport_num->addItems(newstringlist);
}
}
主要思想就是timeout一到就扫描所有可用端口,如果发现跟上次扫描出来的不一致,就重新添加到Combox控件中,运行后显示如下:
但是,这个三个可用端口有一个设备是不适用于用做串口收发的,COM37(J-link设备):
所以我需要我的Combox控件不仅要显示端口号,还需要显示该端口的描述,因此我将这行代码进行修改:
//将
newstringlist += serial_info.portName();
//改为
newstringlist += (serial_info.portName() + " # " + serial_info.description());
修改后再看是这种效果:
虽然能显示描述了,但是显示不完整,并且我只加宽该控件界面也将变得不完整:
ui.comboBox_serialport_num->setFixedWidth(160);
因此,我需要在原基础上只改变下拉框的宽度,方法如下:
#include <qabstractitemview.h> //需要包含该头文件
//将
ui.comboBox_serialport_num->setFixedWidth(160);
//改为
ui.comboBox_serialport_num->view()->setFixedWidth(160);
修改后效果如下:
工程环境问题
1. 找不到ui.XXX.h文件
在创建完工程后,我们需要调用UI界面的控件,但是会提示没有“ui.XXX.h”的文件提示或者无代码行提示,所以你需要将该文件添加到工程中,以debug为例:
在Header Files> 添加 >现有项>添加文件
在当前工程的目录下的\x64\Debug\uic,点击添加(如果没有需要先编译一次才会出现)
添加完后代码行就会提示ui界面下的控件了(如果没还是没有提示就关闭工程重新打开)。
2. 找不到"自定义的.h"文件
解决方法:右键工程(不是解决方案!),然后找到属性打开,
在属性页中找到C/C++>常规>附加包含目录点击编辑
在附加包含目录中新增目目录,目录位置即是报缺少该文件的文件目录,点击确认后解决该问题。
后续我也将会持续更新在开发中遇到的问题…