Classes, Objects, Treewidget and QlistWidget

195 Views Asked by At

I'm trying to create a program for a project in school (University).

The program is basically supposed to have a QTreeWidget with a bunch of components, the QTreeWidget will update when you click on a button (for example Chassis-button will change the QTreeWidget into a bunch of different chassis).

From the QTreeWidget, you're then supposed to be able to mark one that you want and click on a "choose-button" which will transfer that row to a QListWidget. One example of a row could be :


"Fractal Design"

"R3"

"100euro"

"ATX"


I have a bunch of classes for each component. One of the classes is Chassis and it has a function named addChassis which looks like this :

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++;
}

This function works fine if I want to create a class object and add a few chassis into the object and then print out the object, but I can not use it to add chassis into the treewidget. It needs to be QString instead of string and int and Qt seems to have a problem with me making a class object and then transfer the object to the treewidget. I simply do not have enough knowledge to be able to put all the chassis into the QTreeWidget. Right now I've created an additional function in my .cpp file that belongs to the .ui file which look like this :

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);
}

But if I try to put this function in the Chassiclass, it says that "UI is not defined". It's very important that we use classes in this project.

So my two problems are :

  • How to create proper addfunctions to put strings into my TreeWidget?

  • How to transfer the wanted string from my TreeWidget to my ListWidget?

1

There are 1 best solutions below

0
On

if I try to put this function in the Chassi class, it says that "UI is not defined".

Your AddChassi() method looks mostly correct, except of course you are trying to dereference a variable named "ui" and (it appears that) there is no member variable named "ui" that is part of your Computer class, which is why you get that compiler error. Presumably the pointer "ui" is one that is available for use only in other contexts (e.g. because it is a member variable of another class), so making it available for use inside AddChassi() is just a matter of passing it in -- you could pass it every time as one of the arguments to AddChassi() if you want, or you could pass it in to the Computer class's constructor and hold it as a member variable of the Computer class for later use. Or, perhaps better yet, instead of passing in the ui pointer, just pass in the pointer to the QTreeWidget object, since that is the only thing you really need to pass in to the QTreeWidgetItem constructors anyway.

For example:

void Computer::AddChassi(QTreeWidget * tw, QString manufacturer, QString model, QString price, QString size, QString color, QString fanSpots){
    QTreeWidgetItem *itm = new QTreeWidgetItem(tw);
    [...]

my Second problem is to transwer the wanted string from my TreeWidget to my ListWidget

The QTreeWidget class has various accessor functions (such as currentItem() and topLevelItem()) that you can use to obtain a pointer to one of the QTreeWidgetItems objects current attached to the QTreeWidget. Once you have that pointer, you can call the QTreeWidgetItem::text(int) method on it to extract the QString representing the text in the nth column of that item's row. Once you have that QString you can use it to create a new QListWidgetItem with that QString as its constructor argument.