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

使用QT开发界面程序并应用QSS样式后,在不同环境下运行导致样式显示不一致。特别是在使用sudo命令运行时,部分样式无法正常显示。通过设置样式为'gtk+'解决了此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

用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变量,这或许是问题所在,但目前未找到验证方法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值