首页 文章

将子Item插入到一行QTreeWidgetItems中

提问于
浏览
1

我已经设置了我的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;
    }


}

}

ScreenShot的现状

我的问题是文本编辑显示在小于(<)组合框下面而不是ontop(或替换它) .

1 回答

  • 0

    我能够使用QStandardItem找到一个解决方案:setData()和QStackedWidget来获取我之后的功能 .

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

相关问题