QT程序界面在Ubuntu不同权限级别运行差异的解决方法

前端之家收集整理的这篇文章主要介绍了QT程序界面在Ubuntu不同权限级别运行差异的解决方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

背景

用QT开发了一个界面程序(名为test),通过QSS为其指定了widget样式,瞬间感觉程序高大上起来了。但经过几种情况的测试,发现不同的运行方式在Ubuntu上显示的样式效果是不一样的。如下:

1.双击直接运行程序 结果:界面与预期一致

2.在shell中执行 $./test 结果:界面与预期一致

3.在shell中执行 $sudo ./test 结果:界面部分样式生效,有些样式没有显示出来


具体到我的情况,是QTreeWidget中Item的复选框边框显示不正常,如下图所示:图1为正常显示,图2为不正常



解决方法

翻看项目代码,发现前辈写的程序在shell中是这样使用的:

$sudo ./test -style=gtk+
用同样的方法进行验证,果然可以!!!


经过一翻搜索发现,在程序中也可以直接通过如下方式达到同样效果

qApp->setStyle("gtk+")

再看setStyle,该函数可以接受一个字符串(style名称),通过QStyleFactory创建不同的QStyle对象,然后应用到QApplication。通过代码:/opt/Qt5.5.1/5.5/Src/qtbase/src/widgets/styles/qstylefactory.cpp可以看到支持的style有如下几种:



问题分析

之所以出现不指定style时,界面显示差异,还是怀疑是环境变量的问题。

在程序中增加QProcess::systemEnvironment取得环境变量,分别对比上述三种操作的环境变量差异,发现前两种的环境变量相同,都有一个变量:

GTK_Modules=overlay-scrollbar:unity-gtk-module

而第三种操作明显少了很多变量,并且没有GTK_Modules变量,这或许是问题所在,但目前未找到验证方法

暂时先到这里。哪位知道原因或方法的请告知一下~

原文链接:https://www.f2er.com/ubuntu/355706.html

猜你在找的Ubuntu相关文章