Заполнение таблицы в Qt

Я пытаюсь улучшить этот пример для редактора диаграмм.

В примере используется узлы класс с несколькими атрибутами, не связанными с моими потребностями. Прямо сейчас я хочу добавить «список массивов» к этому узел класс для того, чтобы затем заполнить QTableView в диалоге «свойств». Я уже разработал диалог свойств с QTableView. Я даже не уверен, что это возможно / имеет смысл.

В основном таблица должна иметь 4 столбца: название, тип, значение а также единица измерения.

Каждая строка таблицы — это определенное «свойство», которое мне нужно иметь для узла.

Мой вопрос: как можно / нужно моделировать таблицу на уровне класса? Я спрашиваю об этом, потому что я искал QList, QVariant, QMap, QMultiMap, и я не могу понять, как их правильно использовать, и ни один из примеров, которые я нашел до сих пор, также не помогает, по крайней мере, для того, что мне нужно делать. Я видел кое-что о QStandardItemModel класс, и я думаю, что это относится к решению, но я не могу понять, как / почему.

В довершение ко всему, я новичок в Qt / C ++, так что большая часть динамики и жаргона в Qt / C ++ все еще проясняет меня.

Если бы кто-нибудь мог дать мне несколько советов, это было бы здорово.

РЕДАКТИРОВАТЬ:
Это не привлекает большого внимания, и я не знаю, так ли это, потому что я не был достаточно ясен, но в любом случае, попытайтесь представить это:

  • Узел имеет PropertyList
  • тот PropertyList списки свойства
  • свойства являются своего рода словарями, так как они имеют всегда 4 атрибута и соответствующих значения: название: (Строка), тип: (Строка), значение: (двойной) и единица измерения(Строка).
  • один Узел может иметь только один PropertyList; PropertyList может иметь несколько свойства. Немного Вершины будет 3 свойства, у других будет 4, и т.д …

Теперь Вершины представлены на диаграмме через QGraphicsScene с QGraphicsItem. Вы можете получить доступ к PropertiesDialog виджет, который имеет QTableWidget в этом. Эта таблица покажет PropertyList.

Я хочу знать, какую «структуру» я могу создать / определить, которая позволяет мне легко вставлять / читать данные в виджете таблицы — т.е. я загружаю данные в PropertiesList из Узел и это появляется в виджете таблицы; если я изменю данные в виджете таблицы, он перейдет к PropertiesList из Узел.

Надеюсь, что это поможет устранить любые сомнения, которые могут возникнуть.

1

Решение

Что ж, после того как я много потянул за волосы, я получил то, что мне было нужно.

Моим первым шагом было создание Property учебный класс. Этот класс имеет функции для установки или получения название строка тип строка значение двойной и единица измерения строка.

Далее я обновил Node класс для включения функций для добавления и удаления Property указатели на объекты QList<Property *>, Также был включен listProperties функция, которая возвращает все Property объекты из определенного Node,

После этого функция для заполнения QTableWidget с определенным NodeСвойства были закодированы следующим образом:

    propertiesList = node->listMyProperties();

for (int row = 0; row < propertiesList.size(); ++row) {
Property *property = propertiesList.at(row);
addRow();
tableWidget->item(row, 0)->setData(Qt::DisplayRole, property->propertyName());
tableWidget->item(row, 1)->setData(Qt::DisplayRole, property->propertyType());
tableWidget->item(row, 2)->setData(Qt::DisplayRole, property->propertyValue());
tableWidget->item(row, 3)->setData(Qt::DisplayRole, property->propertyUnit());
}

И addRow() функция:

void PropertiesDialog::addRow()
{
int row = tableWidget->rowCount();

tableWidget->insertRow(row);

QTableWidgetItem *item0 = new QTableWidgetItem;
item0->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 0, item0);

QTableWidgetItem *item1 = new QTableWidgetItem;
item1->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 1, item1);

QTableWidgetItem *item2 = new QTableWidgetItem;
item2->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 2, item2);

QTableWidgetItem *item3 = new QTableWidgetItem;
item3->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 3, item3);

tableWidget->setCurrentItem(item0);
}

Это производит то, что мне нужно: иметь класс для хранения значений свойств, связанных с каждым узлом, и представлять их на QTableWidget, Следующим шагом является создание обратного пути, то есть, когда правки происходят в QTableWidgetэти изменения должны распространяться на класс. Теперь я думаю, что могу найти свой путь, надеюсь, это поможет любому, кто пытается найти что-то связанное. Я также обновлю теги и, возможно, отредактирую заголовок, чтобы сделать его более актуальным / значимым.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]