我正在尝试为学校(大学)的项目创建一个程序。
该程序基本上应该有一个带有一堆组件的QTreeWidget,当您单击按钮时,QTreeWidget将更新(例如机箱按钮会将QTreeWidget更改为一堆不同的机箱)。
从QTreeWidget中,您应该能够标记您想要的按钮并单击"选择按钮",该按钮会将该行转移到QListWidget。行的一个例子可以是:
"分形设计"
"R3"
"100欧元"
"ATX"
我为每个组件都有一堆类。其中一个类是机箱,它有一个名为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 而不是字符串和 int,Qt 似乎在我制作类对象然后将对象传输到树小部件时遇到了问题。我根本没有足够的知识来将所有机箱放入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);
}
但是如果我尝试将这个函数放在机箱中,它会说"UI 未定义"。在这个项目中使用类非常重要。
所以我的两个问题是:
如何创建适当的
addfunctions
将字符串放入我的 TreeWidget?如何将想要的字符串从我的 TreeWidget 转移到我的 ListWidget?
如果我尝试将此函数放在 Chassi 类中,它会说"UI 是 未定义"。
您的 AddChassi() 方法看起来基本正确,当然,您尝试取消引用名为"ui"的变量并且(似乎)没有名为"ui"的成员变量是计算机类的一部分,这就是您收到编译器错误的原因。 据推测,指针"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);
[...]
我的第二个问题是从我的树小部件中回答想要的字符串 到我的列表小部件
QTreeWidget 类具有各种访问器函数(如 currentItem() 和 topLevelItem()),您可以使用它们来获取指向当前附加到 QTreeWidget 的 QTreeWidgetItems 对象之一的指针。 有了该指针后,您可以在其上调用 QTreeWidgetItem::text(int) 方法来提取表示该项行第 n 列中的文本的 QString。 一旦你有了那个QString,你就可以使用它来创建一个新的QListWidgetItem,并将那个QString作为它的构造函数参数。