Kto  To
Kto To

Reputation: 514

How to use QItemSelectionModel for QComboBox?

How to use QItemSelectionModel for QComboBox?

BaseModel *baseModel = new BaseModel(data, this);
QItemSelectionModel baseModelSelected(baseModel);
ui->tableView->setModel(baseModel);
ui->comboBox->setModel(baseModel);
ui->tableView->setSelectionModel(baseModelSelected);
ui->comboBox->setSelectionModel(baseModelSelected); // can't

Upvotes: 1

Views: 997

Answers (1)

Dimitry Ernot
Dimitry Ernot

Reputation: 6584

QComboBox doesn't allow you to share a selection model. But, you can use the selection model of your view the update the combo box when the user selects a new item in the list.

For example:

QStringListModel* model = new QStringListModel(QStringList() << "Op1" << "Opt2" << "Opt3" << "Opt4");

QListView* view = new QListView();
view->setModel(model);

QComboBox* combobox = new QComboBox();
combobox->setMinimumWidth(200);
combobox->setModel(model);

QWidget* w = new QWidget();
QHBoxLayout* layout = new QHBoxLayout(w);
layout->addWidget(view);
layout->addWidget(combobox);

QObject::connect(view->selectionModel(), &QItemSelectionModel::selectionChanged, [=](
                 QItemSelection const& newSelection, QItemSelection const& previousSelection) {
    if (newSelection.isEmpty())
        return; // No selected item in the view. Do nothing

    // First selected item
    QString const item = newSelection.indexes().first().data().toString();
    combobox->setCurrentText(item);
});

Upvotes: 1

Related Questions