我有QTreeWidgetItem
两列数据,有没有办法让第二列可编辑?当我执行以下操作时:
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setFlags(item->flags() | Qt::ItemIsEditable);
Run Code Online (Sandbox Code Playgroud)
所有列都可以编辑.
我使用下面的代码创建了一个也是QTreeWidgetItem的复选框.
//Populate list
QTreeWidgetItem *program = createCheckedTreeItem(QString::fromStdString(itr->first), true);
treePrograms->addTopLevelItem(program);
Run Code Online (Sandbox Code Playgroud)
QTreeWidgetItem* ConfigDialog::createCheckedTreeItem(QString name,bool checkBoxState)
{
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(name));
item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
if (checkBoxState)
{
item->setCheckState(0,Qt::Unchecked);
}
else
{
item->setCheckState(0,Qt::Checked);
}
return item;
}
Run Code Online (Sandbox Code Playgroud)
当复选框的状态发生变化时,我需要一种连接信号和插槽的方法.我实现这一点的当前方式如下,但不幸的是不起作用.有人可以解释我做错了什么以及我需要做什么才能让它连接起来?
connect(program, SIGNAL(toggled(bool)), this, SLOT(programChecked(bool)));
Run Code Online (Sandbox Code Playgroud) 有几个网页说QTreeWidgetItem
可以删除或删除QTreeWidget.clear
.但我下面的代码示例似乎没有这样做.我做错了吗?
#!/usr/bin/python
import sys
from PySide.QtGui import QApplication, QWidget, QTreeWidget, QTreeWidgetItem
#from PyQt4.QtGui import QApplication, QWidget, QTreeWidget, QTreeWidgetItem # Result was the same with `PySide`
import time
class TreeWidgetItemChild(QTreeWidgetItem):
def __init__(self):
super(TreeWidgetItemChild, self).__init__()
print 'TreeWidgetItemChild init'
def __del__(self):
print 'TreeWidgetItemChild del'
def test_QTree_clear_children():
tree = QTreeWidget()
tree.setHeaderLabel('funksoul')
i = TreeWidgetItemChild()
tree.addTopLevelItem(i)
print 'Before clearing'
#tree.clear() # Didn't call destructor (__del__)
#tree.removeItemWidget (i, 0) # Didn't call destructor
#i.__del__() # Called destructor but it's called again afterward …
Run Code Online (Sandbox Code Playgroud) 如果顶级项目中没有子节点,我正在尝试删除顶级树窗口小部件项目.这样做的正确方法是什么?我似乎无法在Qt的文档中找到API调用.在顶级树窗口小部件项目上调用delete是否安全?我还没有遇到任何问题,但我想知道这是否安全.非常感谢.
if(topLevelTreeWidgetItem->childCount() > 1) {
topLevelTreeWidgetItem->removeChild(childItem);
}
else
{
delete topLevelTreeWidgetItem;
}
Run Code Online (Sandbox Code Playgroud) 我有一个QTreeWidget,列中填充了一些数字,我该如何对它们进行排序?
如果我使用setSortingEnabled(true); 我只能正确排序字符串,所以我的列被排序:
1 10 100 2 20 200
但这不是我想要的!建议?
我有一个QTreeWidget,它只显示一个根节点和一个子节点级别.我需要允许重新排序子节点.他们绝不能重新成为父母.
这是我在QTreeWidget中启用项目拖动的方法:
ui->levelElements->setSelectionMode(QAbstractItemView::SingleSelection);
ui->levelElements->setDragEnabled(true);
ui->levelElements->viewport()->setAcceptDrops(true);
ui->levelElements->setDropIndicatorShown(true);
ui->levelElements->setDragDropMode(QAbstractItemView::InternalMove);
Run Code Online (Sandbox Code Playgroud)
根项目插入如下:
pItem = new QTreeWidgetItem(ui->levelElements);
pItem->setText(0, node.firstChild().nodeValue());
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled);
Run Code Online (Sandbox Code Playgroud)
当我将一个子项插入视图时,它被声明为:
pItem = new QTreeWidgetItem();
pItem->setText(0, strFileName);
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
pTreeRoot->addChild(pItem);
Run Code Online (Sandbox Code Playgroud)
此时,我可以拖动子项并在子项列表中"重新插入"它.我也可以把它移到根级别 - 这是我不想要的.
我正在使用QT Creator v3,所以QTreeWidget在我的UI定义文件中.
我错过了什么吗?
我创建了一个 QTreeWidget,我试图列出所有显示的项目。
如果项目有子项但未展开,我不想进入项目内部。它确实获得了我可以在树中看到的项目数量。
我试过了 :
for( int i = 0; i < MyTreeWidget->topLevelItemCount(); ++i )
{
QTreeWidgetItem *item = MyTreeWidget->topLevelItem(i);
...
Run Code Online (Sandbox Code Playgroud)
但这只是给了我 topLevelItem,我想要我能看到的一切。在这个例子中,我应该能够数出 14 个项目
是否可以对 QTreeWidget 中的项目进行单独缩进?
具体来说,我有一列包含文本、图标和其中一些复选框。没有复选框的项目会向左移动,因此图标和文本的缩进不会与其他项目内联。如果可能的话,可以用隐藏的复选框来修复吗?
如何在QTreeWidget中创建子项目?
我能够创建顶级项目(在下面列出),但仍然在寻找子项目.
PyQt-> 5.6
Python-> 3.5
Spyder-> 3.0.2
import sys
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QApplication, QWidget
if __name__ == '__main__':
app = 0
if QApplication.instance() != None:
app = QApplication.instance()
else:
app = QApplication(sys.argv)
l1 = QTreeWidgetItem([ "String A", "String B", "String C" ])
l2 = QTreeWidgetItem([ "String AA", "String BB", "String CC" ])
w = QWidget()
w.resize(510,210)
tw = QTreeWidget(w)
tw.resize(500,200)
tw.setColumnCount(3)
tw.setHeaderLabels(["Column 1", "Column 2", "Column 3"])
tw.addTopLevelItem(l1)
tw.addTopLevelItem(l2)
w.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud) 我目前有一个名为“treeWidget”的 QTreeWidget,并且在我的一生中,无法弄清楚如何获取所选 treeWidget 分支的索引值或文本。
self.treeWidget 看起来像:
User
-Inbox
-Sent
-Drafts
-Trash
我需要知道选择了哪个分支,以便我可以在分支对应的文件夹中显示文件夹。我一直试图理解 Qt 文档,但我完全被 C++ 难住了。PyQt 文档没有任何示例。我已经到处搜索了三天,试图修补并找出答案,但不断出现错误。
我认为我最接近的是这样的:
self.connect(self.treeWidget,SIGNAL("itemSelectionChanged()"), self.loadAllMessages) def loadAllMessages(self, folder): item = self.treeWidget.currentItem()
我需要先 setSelectionMode 还是什么?非常感谢所有帮助!
qtreewidgetitem ×10
qt ×9
qtreewidget ×7
c++ ×5
python ×3
pyqt ×2
checkbox ×1
flags ×1
indentation ×1
linux ×1
pyqt5 ×1
pyside ×1
sorting ×1