Qt Connect элементы в treeView - PullRequest
       4

Qt Connect элементы в treeView

0 голосов
/ 08 октября 2019

Я новичок в Qt и все еще изучаю основы. Я сделал Mainwindow, и у меня есть TreeView, comboBox и TextEdit в нем. Я хочу соединить их. Я хочу соединить элементы в моем TreeView с TextEdit. Я хочу, чтобы это было так: поэтому, если я нажимаю на элемент в TreeView, я хочу, чтобы TextEdit отображал другой текст, в зависимости от того, на какой элемент я щелкаю. а также, если я нажимаю на разные элементы в comboBox, я хочу показать другое TreeView.

1 Ответ

0 голосов
/ 09 октября 2019

Вы можете использовать следующее приложение в качестве отправной точки для изучения 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...