Я пытаюсь улучшить этот пример для редактора диаграмм.
В примере используется узлы класс с несколькими атрибутами, не связанными с моими потребностями. Прямо сейчас я хочу добавить «список массивов» к этому узел класс для того, чтобы затем заполнить QTableView в диалоге «свойств». Я уже разработал диалог свойств с QTableView. Я даже не уверен, что это возможно / имеет смысл.
В основном таблица должна иметь 4 столбца: название, тип, значение а также единица измерения.
Каждая строка таблицы — это определенное «свойство», которое мне нужно иметь для узла.
Мой вопрос: как можно / нужно моделировать таблицу на уровне класса? Я спрашиваю об этом, потому что я искал QList, QVariant, QMap, QMultiMap, и я не могу понять, как их правильно использовать, и ни один из примеров, которые я нашел до сих пор, также не помогает, по крайней мере, для того, что мне нужно делать. Я видел кое-что о QStandardItemModel класс, и я думаю, что это относится к решению, но я не могу понять, как / почему.
В довершение ко всему, я новичок в Qt / C ++, так что большая часть динамики и жаргона в Qt / C ++ все еще проясняет меня.
Если бы кто-нибудь мог дать мне несколько советов, это было бы здорово.
РЕДАКТИРОВАТЬ:
Это не привлекает большого внимания, и я не знаю, так ли это, потому что я не был достаточно ясен, но в любом случае, попытайтесь представить это:
Теперь Вершины представлены на диаграмме через QGraphicsScene с QGraphicsItem. Вы можете получить доступ к PropertiesDialog виджет, который имеет QTableWidget в этом. Эта таблица покажет PropertyList.
Я хочу знать, какую «структуру» я могу создать / определить, которая позволяет мне легко вставлять / читать данные в виджете таблицы — т.е. я загружаю данные в PropertiesList из Узел и это появляется в виджете таблицы; если я изменю данные в виджете таблицы, он перейдет к PropertiesList из Узел.
Надеюсь, что это поможет устранить любые сомнения, которые могут возникнуть.
Что ж, после того как я много потянул за волосы, я получил то, что мне было нужно.
Моим первым шагом было создание 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
эти изменения должны распространяться на класс. Теперь я думаю, что могу найти свой путь, надеюсь, это поможет любому, кто пытается найти что-то связанное. Я также обновлю теги и, возможно, отредактирую заголовок, чтобы сделать его более актуальным / значимым.
Других решений пока нет …