Qt ComboBox 2列或水平列?
Qt ComboBox 2 columns or horizontal columns?
我有一个 QComboBox
有一个相当长的下拉菜单。使用样式表 qss
我可以减少长度,但我想知道我是否可以水平或 2 列显示项目?
因为我的值只是键(1 个字符),所以我可以使用 2、3、4 列或使用水平扩展而不是垂直扩展的东西。有机会这样做吗?
必须将其替换为具有流程 QListView::LeftToRight
的 QListView
并设置适当的视图和弹出窗口大小:
#include <QApplication>
#include <QBoxLayout>
#include <QComboBox>
#include <QListView>
class HorizontalComboBox: public QComboBox
{
public:
HorizontalComboBox(QWidget *parent = nullptr):
QComboBox(parent)
{
QListView *m_view = new QListView(this);
m_view->setFlow(QListView::LeftToRight);
setView(m_view);
for(QWidget* o: findChildren<QWidget *>()){
if(o->inherits("QComboBoxPrivateContainer")) {
//popup
o->setFixedHeight(view()->height());
break;
}
}
}
virtual void showPopup() override {
QComboBox::showPopup();
int w = 0;
for(int i=0; i<count(); i++){
QModelIndex ix= model()->index(i, modelColumn(), rootModelIndex());
w += view()->visualRect(ix).width();
}
view()->setFixedWidth(w);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
HorizontalComboBox w;
w.addItems(QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ").split("", QString::SkipEmptyParts));
w.show();
return a.exec();
}
我有一个 QComboBox
有一个相当长的下拉菜单。使用样式表 qss
我可以减少长度,但我想知道我是否可以水平或 2 列显示项目?
因为我的值只是键(1 个字符),所以我可以使用 2、3、4 列或使用水平扩展而不是垂直扩展的东西。有机会这样做吗?
必须将其替换为具有流程 QListView::LeftToRight
的 QListView
并设置适当的视图和弹出窗口大小:
#include <QApplication>
#include <QBoxLayout>
#include <QComboBox>
#include <QListView>
class HorizontalComboBox: public QComboBox
{
public:
HorizontalComboBox(QWidget *parent = nullptr):
QComboBox(parent)
{
QListView *m_view = new QListView(this);
m_view->setFlow(QListView::LeftToRight);
setView(m_view);
for(QWidget* o: findChildren<QWidget *>()){
if(o->inherits("QComboBoxPrivateContainer")) {
//popup
o->setFixedHeight(view()->height());
break;
}
}
}
virtual void showPopup() override {
QComboBox::showPopup();
int w = 0;
for(int i=0; i<count(); i++){
QModelIndex ix= model()->index(i, modelColumn(), rootModelIndex());
w += view()->visualRect(ix).width();
}
view()->setFixedWidth(w);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
HorizontalComboBox w;
w.addItems(QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ").split("", QString::SkipEmptyParts));
w.show();
return a.exec();
}