Создание древовидных моделей в qt и сопоставление данных

#c #qt #model #tree

#c #qt #Модель #дерево

Вопрос:

Я просмотрел документы qt с примерами древовидной модели. Я пытаюсь понять, как сопоставить мою структуру данных с моделью.

У меня есть массив mystructs, который я хотел бы отобразить в виде дерева, может кто-нибудь предложить какую-либо помощь о том, как это сделать. Структура показана ниже

 struct mystruct{
    int id;
    float val;
    struct settings{
            QString setting_1;
            QString setting_2;
            bool on;
    };
};
  

Я пытаюсь вписать эту структуру в пример qt simpletreemodel.

Спасибо

Комментарии:

1. Вам часто приходится взаимодействовать с вашей структурой из древовидного представления? Если нет, я не уверен, что вам следует заходить в view / model для такого простого объекта, как этот. Вы можете подумать о том, чтобы придерживаться QTreeWidget и QTreeWidgetItems

2. да, мне нужно взаимодействовать с представлением

Ответ №1:

Вы могли бы сделать что-то подобное:

Реализовать дерево как QTreeWidget

 class YourTreeWidget : public QTreeWidget
{
public:
    ...
    //reimplement useful stuff of the QTreeWidget 
    //like onItemClicked(...)
};
  

Затем реализуйте элементы, привязанные к mystruct экземпляру

 class mystruct;
class YourTreeWidgetItem : public QTreeWidgetItem
{
public:
    YourTreeWidgetItem(mystruct*);
    mystruct* getData() { return data;}
private:
    mystruct* data;
}
  

Позже создайте одну YourTreeWidget и добавьте по одному элементу для каждого из mystruct экземпляров, которые у вас есть в вашем массиве.
Не забудьте правильно отформатировать ваши QTreeWidget данные в соответствии с данными, которые вы вводите в свои элементы.

 setHeaderLabels( QStringList() << "Column 1" << "Column 2");
...
  

Опять же, это простое решение, но я думаю, что вы можете делать с этим сложные вещи.

ПРИМЕЧАНИЕ: когда я сказал

Вам нужно много взаимодействовать со структурой

Я имел в виду, нужен ли вам пользовательский выбор, пользовательская редакция, пользовательский дисплей…

Комментарии:

1. спасибо за ваше время, Винс, и да, древовидная модель будет использоваться несколькими различными представлениями