【问题标题】:Classes, Objects, Treewidget and QlistWidget类、对象、Treewidget 和 QlistWidget
【发布时间】:2016-06-06 00:53:22
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt class treelist treewidget


    【解决方案1】:

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

    您的 AddChassi() 方法看起来基本正确,当然除了您尝试取消引用名为“ui”的变量并且(看起来)没有名为“ui”的成员变量是您的 Computer 类的一部分,它这就是你得到那个编译器错误的原因。大概指针“ui”是一个只能在其他上下文中使用的指针(例如,因为它是另一个类的成员变量),所以让它在 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 作为它的构造函数参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 2014-09-13
      • 2011-04-29
      • 2017-07-31
      • 1970-01-01
      • 2020-03-24
      • 2017-09-13
      • 2019-07-31
      相关资源
      最近更新 更多