Вы можете использовать следующее приложение в качестве отправной точки для изучения Qt. Действительно, очень важно глубоко понять механизм сигнального слота, чтобы сделать что-то полезное с фреймворком. Также полезно изучить модель-представление-контроллер.
Для этого приложения я использую QItemSelectionModel, которая также прекрасно обрабатывает Multi-Selection.
QCombobox содержит все выбранные элементы, тогда как QLineEdit содержит только текущий индекс, что является разным в случае множественного выбора.
Не бойтесь, если вы не получитеэто все приложение с первой попытки, это нормально. Может потребоваться месяцы, чтобы познакомиться со сложной структурой.
#include <QApplication>
#include <QComboBox>
#include <QItemSelectionModel>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QComboBox>
#include <QTreeView>
#include <QStandardItemModel>
#include <QFrame>
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
auto frame = new QFrame;
frame->setLayout(new QVBoxLayout);
auto treeView = new QTreeView;
auto model = new QStandardItemModel;
treeView->setModel(model);
treeView->setRootIsDecorated(false);
treeView->setHeaderHidden(true);
model->appendRow(new QStandardItem("Item1"));
model->appendRow(new QStandardItem("Item2"));
frame->layout()->addWidget(treeView);
auto textEdit = new QLineEdit;
frame->layout()->addWidget(textEdit);
auto combobox = new QComboBox;
frame->layout()->addWidget(combobox);
auto selectionModel = new QItemSelectionModel;
selectionModel->setModel(model);
treeView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
treeView->setSelectionMode(QAbstractItemView::SelectionMode::MultiSelection);
treeView->setSelectionModel(selectionModel);
QObject::connect(selectionModel, &QItemSelectionModel::currentChanged, [&]
(const QModelIndex& current, const QModelIndex& previous) {
auto string=current.data(Qt::ItemDataRole::DisplayRole).toString();
textEdit->setText(string);
});
QObject::connect(selectionModel, &QItemSelectionModel::selectionChanged, [&]() {
combobox->clear();
for (auto iter : selectionModel->selectedIndexes()) {
auto string = iter.data(Qt::ItemDataRole::DisplayRole).toString();
combobox->addItem(string);
}
});
frame->show();
return app.exec();
}