Qt ComboBox 2列或水平列?

Qt ComboBox 2 columns or horizontal columns?

我有一个 QComboBox 有一个相当长的下拉菜单。使用样式表 qss 我可以减少长度,但我想知道我是否可以水平或 2 列显示项目?

因为我的值只是键(1 个字符),所以我可以使用 2、3、4 列或使用水平扩展而不是垂直扩展的东西。有机会这样做吗?

必须将其替换为具有流程 QListView::LeftToRightQListView 并设置适当的视图和弹出窗口大小:

#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();
}