QComboBox在ubuntu下不显示滚动条问题,下拉框出现位置不固定问题,设置显示最大数量不生效问题,设置item高度不生效问题

发布时间 2023-08-08 22:36:46作者: 柴承训

这里的Ubuntu指的是银河麒麟,问题也是在麒麟下出现的。没有在Ubuntu试过是否有同样的问题。但是估计也差不多,毕竟国产系统跟Ubuntu本来就纠缠不清。

用QT写了一个QComboBox,自定义了一些样式,在Windows下显示正常,但是在Ubuntu下不显示滚动条,下拉框位置根据当前选项变化而不是固定显示在ComboBox正下方,设置最大显示数量为5但是却依次显示全部数据,设置了item高度为20但是实际显示却非常高,问题非常多。

Windows显示正确


Ubuntu下显示错误

对于设置下拉列表高度问题,可以用下面的方法解决:

#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。