Я пытаюсь создать программу для проекта в школе (университете).
Предполагается, что в программе должен быть QTreeWidget с кучей компонентов, QTreeWidget будет обновляться при нажатии кнопки (например, кнопка Chassis изменит QTreeWidget на несколько разных шасси).
С помощью QTreeWidget вы должны иметь возможность отметить то, что вам нужно, и нажать «кнопку выбора», которая перенесет эту строку в QListWidget. Одним из примеров строки может быть:
«Фрактал Дизайн»
«R3»
«100euro»
«ATX»
У меня есть куча классов для каждого компонента. Одним из классов является Chassis, и у него есть функция с именем addChassis, которая выглядит следующим образом:
void ChassisHandler::addChassis(string manufacturer, string model, int price, string size, string color, int fanSpots) {
Chassis **temp = new Chassis*[this->nrOfChassis + 1];
for (int i = 0; i < nrOfChassis; i++)
{
temp[i] = this->chassis[i];
}
delete[] this->chassis;
this->chassis = temp;
this->chassis[this->nrOfChassis] = new Chassis(manufacturer, model, price, size, color, fanSpots);
this->nrOfChassis++;
}
Эта функция работает нормально, если я хочу создать объект класса и добавить несколько шасси в объект, а затем распечатать объект, но я не могу использовать его для добавления шасси в виджет. Это должно быть QString вместо string и int, и у Qt, похоже, есть проблема со мной, когда я создаю объект класса, а затем передаю объект в treewidget. Мне просто не хватает знаний, чтобы можно было поместить все шасси в QTreeWidget. Прямо сейчас я создал дополнительную функцию в моем файле .cpp, который принадлежит файлу .ui, который выглядит следующим образом:
void Computer::AddChassi(QString manufacturer, QString model, QString price, QString size, QString color, QString fanSpots){
QTreeWidgetItem *itm = new QTreeWidgetItem(ui->treeWidget);
itm->setText(0, manufacturer);
itm->setText(1, model);
itm->setText(2, price);
itm->setText(3, size);
itm->setText(4, color);
itm->setText(5, fanSpots);
}
Но если я пытаюсь поместить эту функцию в Chassiclass, он говорит, что «UI не определен». Очень важно, чтобы мы использовали классы в этом проекте.
Итак, две мои проблемы:
Как правильно создать addfunctions
положить строки в мой TreeWidget?
Как перенести нужную строку из моего TreeWidget в мой ListWidget?
если я пытаюсь поместить эту функцию в класс Chassi, он говорит, что «интерфейс
не определен».
Ваш метод AddChassi () выглядит в основном правильно, за исключением того, что вы, конечно, пытаетесь разыменовать переменную с именем «ui» и (кажется, что) нет переменной-члена с именем «ui», которая является частью вашего класса Computer, поэтому вы получить эту ошибку компилятора. Предположительно указатель «ui» — это тот, который доступен для использования только в других контекстах (например, потому что это переменная-член другого класса), поэтому сделать его доступным для использования внутри AddChassi () — это просто вопрос передачи его в — вы можете передавать его каждый раз в качестве одного из аргументов AddChassi (), если хотите, или вы можете передать его конструктору класса Computer и сохранить его как переменную-член класса Computer для дальнейшего использования. Или, что еще лучше, вместо того, чтобы передавать указатель пользовательского интерфейса, просто передайте указатель на объект QTreeWidget, так как это единственное, что вам действительно нужно передать конструкторам QTreeWidgetItem в любом случае.
Например:
void Computer::AddChassi(QTreeWidget * tw, QString manufacturer, QString model, QString price, QString size, QString color, QString fanSpots){
QTreeWidgetItem *itm = new QTreeWidgetItem(tw);
[...]
Моя вторая проблема заключается в передаче нужной строки из моего TreeWidget
в мой ListWidget
Класс QTreeWidget имеет различные функции доступа (такие как currentItem () и topLevelItem ()), которые вы можете использовать для получения указателя на один из объектов QTreeWidgetItems, в данный момент прикрепленных к QTreeWidget. Если у вас есть этот указатель, вы можете вызвать для него метод QTreeWidgetItem :: text (int), чтобы извлечь QString, представляющий текст в n-м столбце строки этого элемента. Получив QString, вы можете использовать его для создания нового QListWidgetItem с этим QString в качестве аргумента конструктора.
Других решений пока нет …