- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经设置了我的 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/
我已将 QTreeWidget 子类化(称为 ToolsSelectorWidget)并通过重写 QTreeWidget::dropEvent() 在其中启用重新排序 void ToolsSelect
我有一个 QTreeWidget有几列,我添加 QTreeWidgetItems到它。我尝试使第二列包含每个 Item 的数值所以我可以按这个值对项目进行排序 QTreeWidgetItem has
我必须用可能太长而无法放在一行中的项目(或项目的子项)填充 QTreeWidget,因此我正在寻找一种自动换行它们的方法。 我想 myQTreeWidget.setWordWrap(True) (通过
我有一个QTreeWidget,我想在某个索引处插入一个子项。我尝试过 void QTreeWidgetItem::insertChild ( int index, QTreeWidgetItem *
我对 QTreeWidget 进行了子类化为了重新实现 protected drag 的功能和 drop为了拖放一个QTreeWidget的 parent 和 child . 它几乎可以工作,问题 就
尝试将图标置于 QTreeWidgetItem 的中心。使用 setTextAlignment() 设置的格式仅适用于列中的文本。例如: item = new QTreeWidgetItem(tree
我需要创建支持格式化文本的 QTreeWidgetItems,例如: MyCreatedType - INTEGER(1) (即:上面的行应该有一个“正常”部分:MyCreatedType 和一个“格
我有一个QTreeWidget,我想在某个索引处插入一个子项。我尝试过 void QTreeWidgetItem::insertChild ( int index, QTreeWidgetItem *
我的QTreeWidget有一个列。它的项目有一个复选框、一个图标和文本。如果用户在某个项目内单击,我想知道该图标是否被单击。如何在 QTreeWidgetItem 中找到图标的位置和大小? 更新添加
有一个函数,当用户单击 QTreeWidgetItem 时触发。我想知道是否有一种方法可以以编程方式“单击”某个项目。我已经尝试过 .setCurrentIndex(index) .setCurren
此代码创建 QTreeWidget,并将 QComboBox 和 QLineEdit 设置为项目小部件。如果要执行以下步骤: 此对话框打开后... 单击该项目(而不是其项目小部件)。项目的背景颜色变为
我创建了一个带有多个 QTreeWidgetItem 的 QTreeWidget。 这是我的代码: //Defined property tree m_pPropertyTree = new QTre
我有以下数据: 1.0 2.0 3.1 4.1 5.2 其中Index.SubIndex但我想在 QTreeWidget 中显示如下: 索引 1 索引3 索引4 索引 2 索引 5 但我做了如下操作:
我有一个QTreeWidget,我希望某些行是不可选择的,这可以通过QTreeWidgetItem::setFlags(treeWidgetItem->flags() & ~Qt::ItemIsSel
我有一个 QTreeWidgetItem。我可以使用 setSelectionMode(QAbstractItemView::MultipleSelection) 设置多选模式。在这种情况下,用户无需
class A { QTreeWidget Tree; QTreeWidgetItem Item; QTreeWidgetItem* pointer; } A::A() { ... Item = QT
我正在尝试构建一个具有多个 QTreeWidgetItems 的 QTreeWidget,我尝试手动添加其中一些并且它可以工作。我的问题是如何使用 for 或 while 循环添加项目。 这是我的部分
我已经设置了我的 QTreeWidget,这样每个单元格都充满了组合框,但是我想在选定的组合框旁边创建一个文本编辑小部件(或覆盖现有的组合框),具体取决于用户选择的组合框项目。 我想我可以通过在初始设
我有一个带有 QTreeWidget 的 Qt 应用程序。在树小部件中,我有与我的应用程序的内部对象关联的项目。为了使该关联起作用,我希望每个树项目都保存一个内部对象的内部标识号。 推荐的方法是什么?
如何通过文本查找QTreeWidgetItem中的item?是否有 QTreeWidget 的 findItem 方法的模拟? 最佳答案 我相信您正在寻找的是 QTreeWidget 中的递归搜索。为
我是一名优秀的程序员,十分优秀!