0

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

该程序基本上应该有一个带有一堆组件的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++;
}

如果我想创建一个类对象并在对象中添加一些底盘然后打印出该对象,此功能可以正常工作,但我不能使用它将底盘添加到树小部件中。它需要是 QString 而不是 string 和 int 并且 Qt 似乎对我制作类对象然后将对象传输到 treewidget 有问题。我根本没有足够的知识能够将所有机箱放入 QTreeWidget。现在,我在属于 .ui 文件的 .cpp 文件中创建了一个附加函数,如下所示:

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?

4

1 回答 1

0

如果我尝试将此函数放在 Chassi 类中,它会说“未定义 UI”。

您的 AddChassi() 方法看起来大部分是正确的,当然除了您尝试取消引用名为“ui”的变量并且(看起来)没有名为“ui”的成员变量是您的 Computer 类的一部分,这就是为什么您得到那个编译器错误。大概指针“ui”是一个只能在其他上下文中使用的指针(例如,因为它是另一个类的成员变量),所以让它在 AddChassi() 中可用只是传递它的问题——如果需要,您可以每次将其作为参数之一传递给 AddChassi(),或者您可以将其传递给 Computer 类的构造函数并将其作为 Computer 类的成员变量保存以供以后使用。或者,也许更好,而不是传入 ui 指针,只需传入指向 QTreeWidget 对象的指针,

例如:

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 作为它的构造函数参数。

于 2016-02-26T04:24:37.323 回答