У меня есть сводка с длинными текстами, чтобы вписаться в combobox, поэтому, когда я выпадаю, они отображаются как «very_long ... long_text».Добавить QListView в QComboBox для правильного отображения полосы прокрутки
Когда я делаю:
QAbstractItemView* view = myCombo->view();
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
появляется горизонтальная полоса прокрутки, но он неактивен и ...- s все еще присутствуют в середине строки.
Этот bugreport говорит, что для получения горизонтальной полосы прокрутки можно использовать пользовательский QListView. Итак, как мне создать этот пользовательский QListView, который я добавлю затем в combobox?
Я пробовал следующее.
QListView* lw = new QListView(0);
QStandardItemModel* model = new QStandardItemModel;
QStandardItem *item = new QStandardItem("long long long long long long long long long long long long text 1");
QStandardItem *item2 = new QStandardItem("long long long long long long long long long long long long text 2");
model->insertRow(0, item);
model->insertRow(1, item2);
lw->setModel(model);
QWidget* test = new QWidget(0);
test->setGeometry(100, 100, 100, 150);
test->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
QGridLayout* layout = new QGridLayout;
test->setLayout(layout);
layout->addWidget(lw);
layout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
test->show();
Тогда у меня есть то, что я хочу видеть (к сожалению, я не разрешено прикреплять изображения), есть полоса прокрутки.
Но когда я хочу, чтобы добавить это комбо:
QListView* lw = new QListView(0);
QStandardItemModel* model = new QStandardItemModel;
QStandardItem *item = new QStandardItem("long long long long long long long long long long long long text 1");
QStandardItem *item2 = new QStandardItem("long long long long long long long long long long long long text 2");
model->insertRow(0, item);
model->insertRow(1, item2);
lw->setModel(model);
QWidget* test = new QWidget(0);
test->setWindowTitle("test");
test->setGeometry(100, 100, 100, 150);
test->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
QGridLayout* layout = new QGridLayout;
test->setLayout(layout);
QComboBox* combo = new QComboBox;
combo->setGeometry(0, 0, 80, 20);
combo->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
combo->setView(lw);
layout->addWidget(combo);
layout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
test->show();
Тогда я получаю пустой комбо. Спасибо за любые ответы.
Вы должны добавить 'combo-> setModel (модель),' 'перед вызовом setView'. Решает ли ваша проблема прокрутки? –
Да, при установлении результата элементы отображаются в комбо правильно, но полоса прокрутки все еще отсутствует, в отличие от дополнительной строки 'lw-> setHorizontalScrollBarPolicy (Qt :: ScrollBarAlwaysOn);' – Terrordrone