这是我正在尝试做的事情(所有父母和孩子必须在右边有一个关闭按钮,将来,只有悬停的项目将能够显示**关闭**按钮):
我的代表代码:
class CloseButton : public QItemDelegate
{
Q_OBJECT
public:
CloseButton( QObject* parent = 0 )
: QItemDelegate( parent )
{};
QWidget* createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
if ( index.column() == 1 )
{
QToolButton* button = new QToolButton( parent );
button->setIcon( QIcon( CLOSE_ICON ) );
//button->setFixedSize( 16, 16 );
//button->setAutoRaise( true );
//button->setVisible( true );
CONNECT( button, SIGNAL( clicked() ), this, SLOT( emitCommitData() ) );
return button;
}
return ( …
Run Code Online (Sandbox Code Playgroud) 我在这里检查了文档,我似乎无法找到设置QTreeWidget标题或标题文本的方法.
如果不设置标题,QTreeWidget会自动在我的代码中使用数字"1".输出的示例如下所示.我假设QTreeWidget有一个方法,我找不到它.
我用a QTreeWidget
来显示一些简单的项目.我通过.setSortingEnabled(true)
调用将列表排序为可排序.这样,列表仅在用户按标题列时排序,而不是在插入新项目时自动排序.
有没有办法强制在指定列中自动排序而不调用.sortItems(column)
每个项目插入?
如果可能,我会突出显示整个排序列.
我最近在一个正在研究的项目中使用了PyQt.我有一个QTreeView连接到QAbstractItemModel,它通常有数千个节点.到目前为止,它工作正常,但我今天意识到选择很多节点非常慢.经过一番挖掘后,事实证明QAbstractItemModel.parent()经常被调用.我创建了最少的代码来重现问题:
#!/usr/bin/env python
import sys
import cProfile
import pstats
from PyQt4.QtCore import Qt, QAbstractItemModel, QVariant, QModelIndex
from PyQt4.QtGui import QApplication, QTreeView
# 200 root nodes with 10 subnodes each
class TreeNode(object):
def __init__(self, parent, row, text):
self.parent = parent
self.row = row
self.text = text
if parent is None: # root node, create subnodes
self.children = [TreeNode(self, i, unicode(i)) for i in range(10)]
else:
self.children = []
class TreeModel(QAbstractItemModel):
def __init__(self):
QAbstractItemModel.__init__(self)
self.nodes = [TreeNode(None, i, unicode(i)) for i in …
Run Code Online (Sandbox Code Playgroud) 有谁知道是否有可能在QTreeWidget上选择多个项目以及如何启用多项选择?
我想要选择的所有项目都是顶级QTreeWidgetItems,并且所有子项都被设置为禁用(即QTreeWidgetItem.setDisabled(True))
我发现找到一种删除我所选择的简单方法令人沮丧QTreeWidgetItem
.
我的拼凑方法涉及将树的当前选择设置为current
,然后:
if current.parent() is not None:
current.parent().removeChild(current)
else:
self.viewer.takeTopLevelItem(self.viewer.indexOfTopLevelItem(current))
Run Code Online (Sandbox Code Playgroud)
这并不可怕,但是没有一个命令可以直接删除该项目吗?
我是学生程序员,我正在使用Qt为工作构建GUI界面.我有一个QTreeWidget
共有8列.需要输入到这些列中的每一列的输入相当小.在这方面,我试图找到一种方法来将所有列重新调整到所需的最小空间.很像当你点击分隔线时执行的动作.我查看了几个网站和Qt文档,但没有找到解决方案.查看文档后,似乎有很多方法可以做到这一点,但我不能让一个工作.我开始认为我需要在某处启用/禁用某些东西.这就像我写入构建函数的更改一样(此函数清除表格;从我的向量中读取数据,在表格中显示某些数据,然后假设将标题/列重新调整到足够大小以适应甚至没有应用列的内容.我尝试了以下但没有任何变化:
ui->treeWidgetInjections->setColumnWidth(i, minimumWidth());
ui->treeWidgetInjections->resizeColumnToContents(i);
ui->treeWidgetInjections->header()->ResizeToContents;
ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth());
Run Code Online (Sandbox Code Playgroud)
所有这些都在我的构建函数的末尾(删除了不相关的信息):
ui->treeWidgetInjections->clear();
for (int i=0; i < qTreeInjectionData.size(); i++)
{
//fill Qtree with items;
//fill QTree items with data;
//re size function here;
}
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) 我环顾四周,似乎问题不仅出现在树小部件上,也出现在其他小部件上.但就我而言,我找到了一个解决方案,虽然不完整.我正在向树窗口小部件添加操作,因此当您右键单击它时,会出现带有这些操作的弹出窗口.但是,当我向我的树窗口小部件添加项目并右键单击它们时,会出现相同的弹出窗口.我想要做的是,当您右键单击树窗口小部件时,会出现树窗口小部件弹出菜单,当您右键单击项目时,会出现另一个相应的弹出菜单.有人知道怎么做吗?
我想在我的程序中实现一个嵌套子级别的树,我正在寻找这两种类型中的哪一种(View/Widget)最适合我的目标.
我有一个任务日期列表,其中包括已完成/错过/失败,每个任务都计算完成/错过/失败的次数,最后是当天的分数.
我想像这样显示它们:
我在QtCreator中使用QTreeWidget做了这个例子,但是我担心修改元素很难,因为它们存储在其他地方.
我的担忧是否合理,我应该转到模型/视图结构,还是可以轻松使用QTreeWidget?树将记录任务,因此将不断变化.元素只会添加到它,而不是删除.日期将从最高 - 最低(第2天,第1天,第1天)排序
qtreewidget ×10
qt ×8
c++ ×4
pyqt ×3
python ×2
delegates ×1
header ×1
model-view ×1
performance ×1
popupmenu ×1
pyside ×1
qlistwidget ×1
qt4 ×1
select ×1
sorting ×1
treeview ×1