QComboBox在ubuntu下不显示滚动条问题,下拉框出现位置不固定问题,设置显示最大数量不生效问题,设置item高度不生效问题
这里的Ubuntu指的是银河麒麟,问题也是在麒麟下出现的。没有在Ubuntu试过是否有同样的问题。但是估计也差不多,毕竟国产系统跟Ubuntu本来就纠缠不清。
用QT写了一个QComboBox,自定义了一些样式,在Windows下显示正常,但是在Ubuntu下不显示滚动条,下拉框位置根据当前选项变化而不是固定显示在ComboBox正下方,设置最大显示数量为5但是却依次显示全部数据,设置了item高度为20但是实际显示却非常高,问题非常多。
Windows显示正确
对于设置下拉列表高度问题,可以用下面的方法解决:
#include <QListView>
ui->comboBox->setView(new QListView());
对于设置item高度不生效问题,设置最大显示数量(setMaxVisibleItems
)不生效问题,可以使用下面方法解决:
#include <QStyleFactory>
ui->comboBox->setStyle(QStyleFactory::create("Windows"));
QStyleFactory::create
创建了一个Windows风格的QStyle,如果你想知道QStyleFactory::create()
可以传哪些参数,可以使用:
qDebug()<<QStyleFactory::keys();
在麒麟系统下,打印了("ukui-dark", "ukui-default", "ukui-light", "ukui", "Windows", "Fusion")
,系统默认是'Fusion'风格,就是特别奇怪的那种风格。
对于不显示滚动条问题,使用下面方法可以解决:
ui->comboBox->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
//ui->comboBox->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); //写这个也可以显示滚动条
设置为总是显示滚动条。
我看了下QT官方文档,系统默认是Qt::ScrollBarAsNeeded
。经过测试,如果使用代码显式设置为Qt::ScrollBarAsNeeded
,也是可以显示滚动条的;如果没有调用setVerticalScrollBarPolicy
显式设置的话,不管QComboBox的内容有多少,都不显示滚动条。这应该是一个QT的bug。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义