环境:Window10 MSVC2019 Qt5.15.2-64bit(更低的版本也会)
现象:笔记本+扩展屏有两个屏幕,Windows 设置的主屏上可以正常显示 QML 的 Window 窗口,辅屏上则会在启动时卡死(一个黑色或者白色的窗口卡死在那里;默认操作焦点在哪个屏幕就会在哪个屏幕弹出窗口,所以程序拖到对应屏幕下启动即可)。禁用掉笔记本英特尔核显后,在主屏和辅屏都能正常启动了。
可以设置显卡黑名单来解决显卡原因导致的渲染问题。Qt Quick 应用 OpenGL 实现的顺序是 desktop,angle,software,要使 Qt Quick 2 工作需要提供 OpenGL2.1 及以上的版本,这就需要禁用一些对 OpenGL 支持有问题的显卡或者驱动版本,然后使用 angle 或者 software 。
Qt 文档:https://doc.qt.io/qt-5/windows-requirements.html
我的 Demo:https://github.com/gongjianbo/MyTestCode/tree/master/Qml/OpenGLBlackList
源码参考:Qt\qt-everywhere-src-5.15.2\qtbase\src\plugins\platforms\windows\openglblacklists\default.json
将有问题的显卡信息写入到一个 json 文件中,然后在环境变量 QT_OPENGL_BUGLIST 指定 json 文件的路径(为了方便我这里用的资源文件路径):
{
"name": "Qt built-in GPU driver blacklist",
"version": "1.0",
"entries": [
{
"id": 1,
"description": "Intel(R) UHD Graphics",
"vendor_id": "0x8086",
"device_id": ["0x9ba4"], //不填则匹配所有产品
"os": {
"type": "win"
},
"features": [
"disable_desktopgl"
]
}
]
}
int main(int argc, char *argv[])
{
qputenv("QT_OPENGL_BUGLIST", ":/glbuglist.json");
QGuiApplication app(argc, argv);
... ...
return app.exec();
}
设置中对该类型的显卡禁用了 desktop opengl,会去尝试 angle 和 software 的实现。
json 文件每个显卡主要区分两个参数,厂商 id 和设备 id,可以从 Windows 设备管理器中查看,这个 VEN 后面的四个十六进制数字就是厂商 id, DEV 后面的四个十六进制数字就是设备 id:
可能不兼容的显卡有很多种,遇到了就更新到黑名单里。
2.QML FileDialog取到的url路径格式化为本地路径QML 的 FileDialog 获取到的文件或者目录路径是 url 格式的,除了路径前面会以 "file:///" 开头,还会转义 #%^{} 等特殊符号。
Qt C++ 的 QUrl 类提供了两个接口用于 url 与本地路径格式的转换:
//url转为本地路径
QString QUrl::toLocalFile() const
//根据本地路径生成url
QUrl QUrl::fromLocalFile(const QString &localFile) //static
三、其他
1.QString去除空白符
QString str=" a b\t\tc\n\nd ";
//去除任意空白符
str.remove(QRegularExpression("\\s")); //"abcd"
str.remove(QRegExp("\\s")); //"abcd"
//去除头部空白
str.remove(QRegExp("^ +\\s*")); //"a b\t\tc\n\nd "
//去除尾部空白
str.remove(QRegExp("\\s* +$")); //" a b\t\tc\n\nd"
//去除两侧空白
str=str.trimmed(); //"a b\t\tc\n\nd"
//去除两侧空白,并将内部空白替换为单个空格
str=str.simplified(); //"a b c d"
qDebug()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?