Пользовательский QAbstractItemModel или QAbstractItemView, как в проводникеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательский QAbstractItemModel или QAbstractItemView, как в проводнике

Сообщение Anonymous »

Я уже некоторое время экспериментирую с концепцией представления модели в qt и c++. Моя цель — представить данные в таблице, как это может сделать проводник Windows...
С табличным представлением данных проблем нет. Это происходит только тогда, когда курсор реализован...
Курсор разбивается на отдельные ячейки как в QTreeView, так и в QTableView.
Как бы я ни старался, каждый раз курсор разбивается на отдельные ячейки, которыми можно управлять, по крайней мере, с помощью клавиш курсора. Но я не хочу такого поведения. Я вообще не хочу работать с отдельными ячейками, а графический интерфейс "не должен" позволять выбирать, отмечать, перемещать в них ячейки и т. д. (даже если в ячейках отключено редактирование).
Правильно работает только опция древовидного просмотра в основных настройках. Как только я включу выбор нескольких строк. Курсор сразу разбивается на ячейки.
Мне интересно, какое решение в итоге правильное. Влияет ли такое поведение на модель (данные хранятся не в строках с одним столбцом, а в строках и столбцах) или такое поведение влияет на представление.
Я тоже думаю, возможно ли это как-то настроить и изменить qtreeview или создать совершенно новое представление на основе qtreeview или qtableview
Может ли кто-нибудь указать мне правильное направление? Я уже обращался к ChatGpt, это очень помогло, но в этом он мне не помог. Возможно, я задал ему неправильные вопросы.
Тестовый код здесь:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

// Create base layout
QWidget mainWidget;
QVBoxLayout layout(&mainWidget);

// Create 3 rows and 3 columns model
QStandardItemModel model(3, 3);
model.setHorizontalHeaderLabels({"Code", "Name", "Description"});

// insert data
for (int row = 0; row < 3; ++row)
{
for (int column = 0; column < 3; ++column)
{
QStandardItem *item = new QStandardItem(QString("Data %1").arg(row * 3 + column + 1));
model.setItem(row, column, item);
}
}

// Create QTreeView
QTreeView view1;
view1.setModel(&model);
view1.setRootIndex(model.index(-1, 0));
view1.setRootIsDecorated(false); // Hide expand/collapse ikon

view1.setSelectionBehavior(QAbstractItemView::SelectRows);
view1.setSelectionMode(QAbstractItemView::MultiSelection);

// Create QListView
QTableView view2;
view2.setModel(&model);
view2.setRootIndex(model.index(-1, 0));

view2.setSelectionBehavior(QAbstractItemView::SelectRows);
view2.setSelectionMode(QAbstractItemView::MultiSelection);

layout.addWidget(&view1);
layout.addWidget(&view2);

mainWidget.show();

return app.exec();
}
Плохой пример:
Изображение

Идеальное целевое решение:
Изображение
Поскольку я не полный профессионал, мне довольно сложно определить, какой объект лучше всего подходит для достижения цели. Кажется, что ни один объект (QTreeView, QListView, QTableView) не является правильным, и мне нужно создать совершенно новое пользовательское представление.
  • QTreeView в первую очередь создан для дерева структура, поэтому мне нужно удалить все элементы дерева
  • QTableView в первую очередь создан для работы с ячейками, поэтому мне нужно перестроить его из ячеек в строки
  • QListView использует только один столбец, поэтому мне нужно реализовать функцию нескольких столбцов.
Мне кажется, что мне нужно создать какое-то новое представление ( MyRowView), который сочетает в себе QTableView и QTreeView.
Можете ли вы посоветовать мне, как это сделать?

Подробнее здесь: https://stackoverflow.com/questions/787 ... e-explorer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Настройка значков «синхронизации» в проводнике
    Гость » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • Открытие папки в проводнике и выбор файла
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Почему значение моего столбца настраиваемых свойств не отображается в проводнике?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Путь xlsxwriter не найден, путь работает в проводнике Windows
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Открытие папки в проводнике и выбор файла
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»