• 200阅读
  • 0回复

Qt/C++开发经验小技巧296-300 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 07-02

296. 使用QDir::setCurrent设置当前目录后,会影响程序中的所有相对目录的执行,导致可能的意外发生,一般相对目录都默认是可执行文件所在目录,所以如果程序中为了特殊处理临时调用了QDir::setCurrent设置过相对目录,建议处理完成以后立即切换回来。
```cpp
QDir::setCurrent("f:/");
QImage img(":/image/bg_novideo.png");
//结果图片保存在f:/1.jpg
img.save("1.jpg", "jpg");
img.save("./1.jpg", "jpg");

//下面是正确做法
//先记住之前的目录
QString path = QDir::currentPath();
QDir::setCurrent("f:/");
xxxxxxx执行任务

//重新设置回默认目录
QDir::setCurrent(path);
//结果图片保存在当前目录下
img.save("1.jpg", "jpg");
```

297. 大概从Qt6.4开始,如果项目中同时使用了QOpenGLWidget和QWebEngine浏览器控件,可能会出现QWebEngine加载网页黑屏的情况,6.4.3和6.5.3版本必现。根据官网的描述[https://doc.qt.io/qt-6/qquickwidget.html#graphics-api-support](https://doc.qt.io/qt-6/qquickwidget.html#graphics-api-support) ,你需要额外加一行代码。
```cpp
#include "qquickwindow.h"
int main(int argc, char *argv[])
{
    QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
    QApplication a(argc, argv);
}
```

298. 现在现在新版的Qt都是需要在线下载,有时候下载到中途过程会遇到提示下载错误,很可能是部分插件模块对应服务器没有打包导致的,一般都是一些末尾带TP字样的模块,这些模块一般也不会用,所以如果想要安装成功,你需要到选择Qt版本和插件的地方,打开Additional Libraries节点,将那些用不上的尤其是TP结尾的都不勾选,再安装即可。

299. Qt中可以通过qputenv和qgetenv来设置和获取系统环境变量,既可以在代码中设置对应的值,也可以在系统环境变量中设置,比如windows系统环境变量中设置,相当于可以自定义字符串指定值,这样灵活性大大增强,有时候因为代码不能修改了,可以尝试去设置一个Qt认识的环境变量字符串值来产生效果。这里要特别提示的是,环境变量设置后一定要生效才能正常读取到,比如xp系统设置后可能要重启操作系统才能生效,还有一个是要重启QtCreator才能识别到最新的环境变量,可能是做了缓存机制。
```cpp
//设置每个窗口都有独立的句柄
QApplication a(argc, argv);
a.setAttribute(Qt::AA_NativeWindows);

//上面的方法是通过代码的方式设置/有时候已经是可执行文件/无法修改代码
//经过查阅代码得知会优先通过qgetenv读取是否有QT_USE_NATIVE_WINDOWS标志
//如果存在则按照QT_USE_NATIVE_WINDOWS变量的值进行赋值
//这种方法有个缺点/就是所有的Qt程序都会应用
```

300. 布局的setContentsMargins函数参数依次是左上右下,而qss中的margin依次是上右下左,很多人混搞混。
4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 07-02
20091001753 贡献值 +1 - 07-02
20091001753 威望 +1 - 07-02
20091001753 金钱 +10 - 07-02
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个