Qt ComboBox 2 столбца или горизонтальные столбцы? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть QComboBox с довольно длинным выпадающим списком. С таблицами стилей qss я могу уменьшить длину, но мне интересно, могу ли я отображать элементы по горизонтали или в 2 столбца?

Поскольку мои значения - это просто ключи (1 символ), я мог бы использовать 2,3,4 столбца или использовать нечто, расширяющееся по горизонтали, а не по вертикали. Есть ли шанс сделать это?

DropDown

1 Ответ

0 голосов
/ 06 ноября 2018

Он должен быть заменен на QListView с потоком QListView::LeftToRight и установить соответствующий размер представления и всплывающего окна:

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