类,对象,Treewidget和QlistWidget

时间:2016-02-23 23:17:10

标签: c++ qt class treelist treewidget

我正在尝试为学校(大学)的项目创建一个程序。

该程序基本上应该有一个带有一堆组件的QTreeWidget,当你点击一个按钮时,QTreeWidget会更新(例如Chassis-button会将QTreeWidget更改为一堆不同的机箱)。

从QTreeWidget,你应该能够标记你想要的一个,然后点击一个“选择按钮”,它将该行转移到一个QListWidget。一行的一个例子可能是:

“分形设计”

“R3”

“100欧元”

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

如果我想创建一个类对象并在对象中添加一些底盘然后打印出该对象,这个函数可以正常工作,但我不能用它来将机箱添加到treewidget中。它需要是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?

1 个答案:

答案 0 :(得分:0)

  

如果我尝试将此功能放在Chassi类中,它会说&#34; UI是   未定义&#34;。

你的AddChassi()方法看起来大致正确,当然你试图取消引用一个名为&#34; ui&#34;的变量。并且(似乎)没有名为&#34; ui&#34;的成员变量。这是您的Computer类的一部分,这就是您遇到编译器错误的原因。大概是指针&#34; ui&#34;是一个只能在其他上下文中使用的(例如因为它是另一个类的成员变量),所以让它可以在AddChassi()中使用只是传入它的问题 - 你可以每次传递它如果你愿意,可以作为AddChassi()的参数之一,或者你可以将它传递给Computer类的构造函数并将其保存为Computer类的成员变量供以后使用。或者,或许更好的是,不是传入ui指针,只需传入指向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()),可用于获取指向当前附加到QTreeWidget的QTreeWidgetItems对象之一的指针。获得该指针后,可以在其上调用QTreeWidgetItem :: text(int)方法,以提取表示该项的第n列中的文本的QString。一旦你有了这个QString,就可以使用它来创建一个新的QListWidgetItem,并将该QString作为它的构造函数参数。