gpt4 book ai didi

c++ - 将子项目插入一行 QTreeWidgetItem

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:22 26 4
gpt4 key购买 nike

我已经设置了我的 QTreeWidget,这样每个单元格都充满了组合框,但是我想在选定的组合框旁边创建一个文本编辑小部件(或覆盖现有的组合框),具体取决于用户选择的组合框项目。

我想我可以通过在初始设置时将组合框父级添加为属性来实现这一点,然后在与组合框交互时只需使用 setItemWidget 将文本编辑项放在所选组合框之后的列中(使用同一个子项)。但似乎没有正确传递父级或其他一些问题导致文本编辑小部件出现在它应该出现的行下方。

我附上了一张照片和一些代码以供澄清。

这是我为 QTreeWidget 设置组合框的地方(特别是 rowType == 0 的地方)

void customMethodConstructorWindow::addChildRow(QTreeWidget *widgetParent,QTreeWidgetItem *itemParent,int rowType)
{
//widgetParent->setColumnCount(methodBlocks.at(rowType).size());
if(rowType == 0)
{
QTreeWidgetItem *childItem = new QTreeWidgetItem(itemParent);

QVariant itemParentVariant;
itemParentVariant.setValue(itemParent);
for(uint cycleSetup = 0;cycleSetup < methodBlocks.at(rowType).size();cycleSetup++)
{

QComboBox *itemComboBox = new QComboBox;
itemComboBox->setProperty("rowType", rowType);
itemComboBox->setProperty("row", 0);
itemComboBox->setProperty("column",cycleSetup);
itemComboBox->setProperty("itemParent",itemParentVariant);
itemComboBox->addItems(methodBlocks.at(0).at(cycleSetup));
QObject::connect(itemComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(OnComboIndexChanged(const QString&)));
widgetParent->setItemWidget(childItem,cycleSetup,itemComboBox);
itemParent->addChild(childItem);
}

}
else
{
QTreeWidgetItem *childItem = new QTreeWidgetItem(itemParent);

QComboBox *item0ComboBox = new QComboBox;
item0ComboBox->setProperty("rowType", rowType);
item0ComboBox->setProperty("row", 1);
item0ComboBox->setProperty("column", 0);
item0ComboBox->addItems(methodBlocks.at(1).at(0));
QObject::connect(item0ComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(OnComboIndexChanged(const QString&)));
widgetParent->setItemWidget(childItem,0,item0ComboBox);
itemParent->addChild(childItem);

QComboBox *item1ComboBox = new QComboBox;
item1ComboBox->setProperty("rowType", rowType);
item1ComboBox->setProperty("row", 1);
item1ComboBox->setProperty("column", 1);
item1ComboBox->addItems(methodBlocks.at(1).at(rowType));
QObject::connect(item1ComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(OnComboIndexChanged(const QString&)));
widgetParent->setItemWidget(childItem,1,item1ComboBox);
itemParent->addChild(childItem);
}
}

这是我尝试在其中一个组合框上创建文本编辑小部件的地方

void customMethodConstructorWindow::OnComboIndexChanged(const QString& text)
{
QComboBox* combo = qobject_cast<QComboBox*>(sender());
if (combo)
{

int nRow = combo->property("row").toInt();
int nCol = combo->property("column").toInt();
switch (nRow) {
case 0:
{
switch (nCol)
{
case 0:
{
//combo->setVisible(false);
//testPoint = combo->pos();


}
break;
case 1:
{
if(combo->currentIndex() != 0)
{
QTreeWidgetItem *childItem = new QTreeWidgetItem(combo->property("itemParent").value<QTreeWidgetItem*>());
QTextEdit *textItemEdit = new QTextEdit;
//QObject::connect(item1ComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(OnComboIndexChanged(const QString&)));
ui->methodSetupTreeWidget->setItemWidget(childItem,2,textItemEdit);
}

}
break;
case 2:
//customObjectAttributes.comparisonType.push_back(combo->currentIndex());
break;
case 3:
{
//customObjectAttributes.valueB.push_back(combo->currentIndex());
}
break;
case 4:

break;
case 5:
break;
case 6:
break;
case 7:
//ui->logicSetupTableWidget->setRowCount(ui->logicSetupTableWidget->rowCount()+1);
if(combo->currentIndex() != 3)
{
//addComboRow(ui->logicSetupTableWidget->rowCount()-1);
}
//customObjectAttributes.outputType.push_back(combo->currentIndex());
break;
}
}
break;
case 1:
{
switch (combo->property("column").toInt())
{
case 0:

break;
case 1:
{
addChildRow(ui->methodSetupTreeWidget,ui->methodSetupTreeWidget->itemAt(QPoint(2,1)),0);
addChildRow(ui->methodSetupTreeWidget,ui->methodSetupTreeWidget->itemAt(QPoint(3,1)),1);

}
break;
case 2:
{

}
break;
case 3:
{

}
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
{

if(combo->currentIndex() != 3)
{
//addComboRow(ui->logicSetupTableWidget->rowCount()-1);
}

}
break;
}
}
break;
}


}

}

当前情况截图

我的问题是文本编辑显示在小于 (<) 组合框下方,而不是在顶部(或替换它)。

最佳答案

我能够找到使用 QStandardItem:setData() 和 QStackedWidget 的解决方案来获得我想要的功能。

这是在尝试解决相关问题的过程中完成的 here.

关于c++ - 将子项目插入一行 QTreeWidgetItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com