这里的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。