找回密码
 立即注册
收起左侧

Qt/C++开发经验小技巧296-300

0
回复
165
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: Qt文章 2024-7-2 12:45:24 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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依次是上右下左,很多人混搞混。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了