Qt开发经验小技巧216-220

2022-05-21  本文已影响0人  feiyangqingyun
  1. Qt的网络库支持udp广播搜索和组播搜索,其中组播搜索可以跨网段搜索,有时候你会发现失灵,此时你可以尝试把本地的虚拟机的网卡禁用试试,估计就好了。还有就是在本地开启了代理啥的,先关掉试试。近期在使用tcpsocket连接的时候,发现在Qt4和Qt5中正常的程序,到了Qt6中就不行了,报错提示 The proxy type is invalid for this operation ,原来是本地设置了代理导致的,可能在Qt6以前会默认跳过去不处理。
//也可以通过代码设置跳过代理
#include <QNetworkProxy>
QNetworkProxyFactory::setUseSystemConfiguration(false);
//下面这样每次设置也可以
tcpSocket->setProxy(QNetworkProxy::NoProxy);

//查阅到文章 https://www.cnblogs.com/cppskill/p/11730452.html
//从5.8开始socket默认代理类型是DefaultProxy而不是NoProxy,不知道出于什么考虑。
  1. 关于交叉编译,对于初学者来说是个极难跨过去的砍(一旦跨过去了,以后遇到需要交叉编译的时候都是顺水推舟、信手拈来。),因为需要搭建交叉编译环境,好在现在厂家提供的板子基本上都是测试好的环境,尤其是提供的编译器,不用自己再去折腾,按照官方手册来基本上不会有啥的的问题。
  1. 在Qt中设置图片有时候会发现不成功,很可能是因为文件的拓展名不正确导致的,比如jpg的图片拓展名是png,bmp的图片拓展名改成了jpg,QImage、QPixmap传入文件路径加载图片,是通过拓展名去调用对应的图片解析算法,比较傻,但是速度快,不用经过分析具体内部是何种图片格式。如果想要不管拓展名都能保证加载成功,则必须读取图片文件数据加载的方式处理。
//可以是资源文件中的图片也可以是本地文件
QString fileName = ":/test.png";

//此方式按照拓展名来区分具体格式不准确
//如果拓展名不正确就无法加载成功
ui->label->setPixmap(QPixmap(fileName));

//通过直接读取图片数据加载保证成功
QFile file(fileName);
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();

//通过 QImage 处理
QImage img;
img.loadFromData(data);
//下面这种方式也行
//QImage img = QImage::fromData(data);
ui->label->setPixmap(QPixmap::fromImage(img));

//通过 QPixmap 处理
QPixmap pix;
pix.loadFromData(data);
ui->label->setPixmap(pix);
  1. 总结几个Qt版本的冷知识。
  1. Qt官方除了Qt库一直在升级外,对应的集成开发环境也在更新升级,一般会选用最新的Qt库编译新版本,要注意的是,有些人安装的旧版本的qtc,加载比较高版本的Qt库,很容易出现报错提示 Project ERROR: Cannot run compiler 'g++'. Maybe you forgot to setup the environment? 之类的,一般是版本跨度过大,比如用Qt5.5附带的qtc加载Qt5.9的库,导致有些环境识别不到,可能是qtc在新版本中对某些识别处理规则有变动。所以一般建议可以用新的qtc加载旧的Qt库,不建议旧的qtc加载新的Qt库。
上一篇下一篇

猜你喜欢

热点阅读