PyQt-将XML加载到QTreeWidget中
我正在尝试在PYQT中制作基本的XML故事制作者.到目前为止,我已经能够弄清自己的一切,但是我遇到了一些障碍.我不知道如何将XML文件加载到qtreewidget中.我需要保留层次结构,但说层次结构似乎是随机的.我会发布我的代码,只需记住开放功能不起作用(出于明显的原因): import sys, os from PyQt4 import Qt, QtGui, QtCore class MainWindow( QtGui.QMainWindow ): width = 640 height = 480 def __init__( self ): QtGui.QMainWindow.__init__( self ) self.setWindowTitle( "Story Maker" ) self.setWindowIcon( QtGui.QIcon( os.path.d
8 2023-12-21
编程技术问答社区
从qtreeview或qtreewidget制作树文件夹
从REST API读取文件夹树,然后将它们显示给用户 示例json响应呼叫API: [ {"name":"/folder1/file1.txt";"size":"1KB"}, {"name":"/folder1/file2.txt";"size":"1KB"}, {"name":"/folder1/sub/file3.txt";"size":"1KB"}, {"name":"/folder2/file4.txt";"size":"1KB"}, {"name":"/folder2/file5.txt";"size":"1KB"} ] 我只想像下面的图像一样制作GUI: 有2个选项: qtreeview qtreewidget 在这张照片中,我使用了Qtreewidget(带有静态数据). 目前,我不知道为此制作数据模型. 我制作了treemodel来为qtreeview设置数据. 但是当它们以GUI显示时,所有数据仅在列名中显示. 我从但是现在我无法
8 2023-10-26
编程技术问答社区
QTreeView或QTreeWidget
我想在我的程序中实现一棵带有嵌套子级别的树,我正在寻找这两种(视图/小部件)中的哪一种最适合我的目标. 我有一个任务的列表,这些任务要么完成/错过/失败,每个任务都有完成/错过/失败的次数,最后是当天的分数. 我想像这样显示: 我使用qtreewidget在qtcreator中进行了此示例,但是我担心很难修改元素,因为它们存储在其他地方. 我的担心是理性的吗?我应该去模型/视图结构,还是可以轻松使用Qtreewidget?树将记录任务,因此将不断变化.元素只会添加到其中,而不会删除.日子将从最低最高的(第2天都是第一,然后是第1天) 解决方案 如果您的数据存储在数据库模型中,或者您想拥有单个数据模型并以不同的方式显示它,那么您绝对最好使用QTreeView. 但QTreeWidget具有某种方式,以及在索引中处理模型的方法.通常,如果您只想要易于工作的东西,则可以使用窗口小部件. 但是模型/视图方法更一般和灵活的IMO.您可以创建自己的模型子类并查
6 2023-10-26
编程技术问答社区
文件树和子文件夹的QTreeWidget
所以,我正在使用的是qtreewidget来制作文件树.我可以轻松地创建文件和文件夹.但是,当我们谈论子折叠者时,问题就到了.例如: Folder1 Folder1/SubFolder1 Folder1/SubFolder1/SubFolder2 如何确切创建子折叠者?这是我制作文件夹的代码: void Tree::addFolder(const QString &folderName) { QTreeWidgetItem *item = new QTreeWidgetItem(); item->setText(0, folderName); // Sets the text. m_projectItem->addChild(item); // Adds it to the main path. (It's a QTreeWidgetItem) this->expandItem(item); // Expands. } 我是否需要创建另
18 2023-10-04
编程技术问答社区
可以在QTreeWidget列中对数字进行排序吗?
我有一个带有一些数字的列的Qtreewidget,我该如何排序? 如果我使用setSortingEnabled(true);我只能正确排序字符串,因此我的列进行排序: 1 10 100 2 20 200 ,但这不是我想要的! 建议? 解决方案 您可以对 class TreeWidgetItem : public QTreeWidgetItem { public: TreeWidgetItem(QTreeWidget* parent):QTreeWidgetItem(parent){} private: bool operatorsortColumn(); return text(column).toLower()
8 2023-09-07
编程技术问答社区
如何对QTreeWidget的列进行自动排序?
我正在使用QTreeWidget显示一些简单的项目.我将列表设置为可通过.setSortingEnabled(true)呼叫进行排序.这样,只有在用户按标题列,而在插入新项目时不会自动对列表进行排序. 是否有一种方法可以在指定的列中强制自动排序,而无需在每个项目插入时调用.sortItems(column)? 如果可能的话,我将重点介绍整个排序的列. 解决方案 要这样做,请使用 qtreeview> qtreeview> 和 qtreeview :: sortbyColumn .只需记住要打开/之后/您最初填充了小部件,然后再次/之前将其关闭/进行任何批量更新以提高效率.
28 2023-09-07
编程技术问答社区
如何在PyQt4中实现QTreeWidget的itemChecked和itemUnchecked信号?
在Qt Signals: (quote from PyQt4 QTreeWidget documentation page) void currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *) void itemActivated (QTreeWidgetItem *,int) void itemChanged (QTreeWidgetItem *,int) void itemClicked (QTreeWidgetItem *,int) void itemCollapsed (QTreeWidgetItem *) void itemDoubleClicked (QTreeWidgetItem *,int) void itemEntered (QTreeWidgetItem *,int) void itemExpanded (QTreeWidgetItem *) void itemPressed (QTreeWidgetItem *
12 2023-09-03
编程技术问答社区
点击项目视图空白区域时清除选择
我用QTreeWidget制作了树结构,并且效果很好.但是我有一个问题.通常,使用树结构,如果我想取消选择全部选择,我单击树木的空白区域.但是QTreeWidget似乎并不支持(或者我找不到). 子类或其他东西可以解决问题吗?确定单击空白区域似乎是解决方案的关键,但我找不到信号或任何东西. 解决方案 下面的示例代码在单击空白区域时将清除选择(和当前项目),或者按下 esce 时,在树小部件具有键盘焦点时.它将与任何继承 qabsTractItemview (不仅是QTreeWidget): class MyWidget(QTreeWidget): def keyPressEvent(self, event): if (event.key() == Qt.Key_Escape and event.modifiers() == Qt.NoModifier): self.selectionModel()
0 2023-08-25
编程技术问答社区
多重选择 QTreeWidget
有人知道是否有可能在qtreewidget上选择多个项目以及如何启用多个选择? 我想选择的所有项目都是顶级qtreewidgetItems,他们的所有孩子都将被禁用(即qtreewidgetItem.setDisabled(true)) 解决方案 是,您需要调用 setSelectionmode "> setSelectionmode 在INIT启用QABSTRACTITEMVIEW :: MULTESELECTION. qtreeview/qtreewidget继承qabstractitemview,因此可用. 然后禁用项目,只需挂接到qtreewidgets.itemselectionChanged()信号. 其他解决方案 我认为以下会有所帮助: youQTreeWidget.setSelectionMode(QGui.QAbstractView.MultiSelection)
18 2023-08-25
编程技术问答社区
如何绘制不同风格的 QTreeWidgetItem?
这是主要问题:我正在使用QTreeWidget类作为主树,它必须向我展示此树结构: [Today] [Row1] [Row2] [SubRow21] [SubRow22] [Row3] [Yesterday] [Row4] [SubRow41] [etc] 使用QT Designer我设置了此样式表代码: QTreeWidget#treeWidget::item { height: 24px; border: none; background-position: bottom left; background-image: url(:/backgrounds/images/backgrounds/row_back.png); } QTreeWidget#treeWidget::item:selected { color: #000000;
8 2023-07-25
编程技术问答社区
带列的 QTreeView
我在CAN总线上收到的这些消息需要在合适的QT小部件上显示(请参阅附件图片).看来我可以使用QTreeView. 我需要显示一棵树,其中包含许多消息,如所示图片所示.每一行都包含有关接收消息的信息. 它应该由列组成: 长度 接收时间 消息ID 消息的名称 消息内容 ,当我扩展消息时,它应该具有不同的信号. 如何用列制作qtreeview? 解决方案 存在一个问题,不允许您制作屏幕截图所显示的内容,而第一和第二级层没有相同的列布局. afaik,不可能使用QTableView或QTableWidget当前实现来实现自己的类别. 如果您可以适应两个级别的相同列布局,请继续阅读我写的内容,然后再将其他视图带到您的屏幕截图: 您可以,Qtreeview只是一个QTableView,首先是一些艺术品 列. 将所有想要的列添加到模型中.一个简单的 [qstandardemmodel] [1]足以做类似的事情 截图 只记住2件事:
22 2023-07-25
编程技术问答社区
为 QTreeWidget 头设置委托
我需要为QTreeWidget标头设置委托或通过其他方式使其与HTML标签一起使用. 我使用 为QTreeWidget项目设置了一个委托 ui->tree->setItemDelegate(delegate); 它有效. 但是,将委派设置为标题不起作用: ui->tree->header()->setItemDelegate(delegate); 解决方案 它无法正常工作,并且在此处记录了 http:http://qt-project.org/doc/qt-4.8/qheaderview.html#appearance 注意:每个标头构成每个部分本身的数据,并且不依赖委托.结果,调用标题的setItemdelegate()函数将没有效果.
12 2023-07-25
编程技术问答社区
在一行 QTreeWidgetItems 中插入一个子项
我已经设置了我的QTREEWIDGET,使每个单元格都充满了组合,但是我想在所选的ComboBox旁边创建一个文本编辑窗口小部件(或覆盖现有的Combobox),具体取决于用户选择的组合项目. 我认为我可以通过在最初设置时将Comboboxes父添加为属性来做到这一点,然后在与ComboBox交互后,只需使用SetIteMwidget使用SetIteMwidget将文本编辑项目放入列后,将其放入列后(使用同一孩子).但似乎父母未正确传递,或者其他一些问题导致文本编辑小部件出现在应有的下方的行中. 我已经附加了一张照片和一些代码以进行澄清. 这是我设置QTREEWIDGET的Comboboxes(特别是Rowtype == 0) void customMethodConstructorWindow::addChildRow(QTreeWidget *widgetParent,QTreeWidgetItem *itemParent,int rowType) { //w
12 2023-07-25
编程技术问答社区
QTreeView 中的一种文件格式
是否可以仅设置用户可见的一个文件格式? 我正在文档中搜索它,但找不到... 如果没有,您建议使用哪些小部件? 解决方案 我假设您正在使用qfilesystemmodel的qtreeview.如果没有,我建议这样做. Qtreewidget并不那么灵活. qfilesystemmodel具有一种称为setNameFilters的方法,该方法应该做您想要的.要使用它,请这样做: QStringList filters; filters.append("*.cc"); // whatever filters you want filters.append("*.h"); QFileSystemModel *model = new QFileSystemModel; model->setNameFilters(filters); QTreeView *view = new QTreeView; view->setModel(model); 其他解决方案 //filt
6 2023-07-25
编程技术问答社区
Qt 模型/视图与标准部件
我目前正在阅读模型/查看 tutorial ">来自qt的教程我仍然不确定我是否应该在QT程序中使用模型/视图或小部件: 我需要执行一个Logger应用程序,该应用程序将在模拟环境中监视所有信息.基本情况可能是: 用户1 对虚拟实体b 说些什么(Logger应用程序获取用户1所说的内容并在表观视图或列表视图中显示) 虚拟实体b 回复用户1 (Logger应用程序获取用户1所说的内容并将其添加到表视图或列表视图) etc 此Logger应用程序的需求是实时获取此信息,而且收集到的数据将无法编辑.本质上,这只是显示日志. 那么,使用模态/视图或小部件足以完成我想做的事情是值得的吗? 谢谢 解决方案 我有模拟目标和模拟问题.我看了两个解决方案. 我创建了具有20 MB大小的日志文件.然后,我用自己的模型将他加载到QtableView,并使用标准模型. qtableView比qtableWidget(约1.5分钟)更快(约30秒),但是使
18 2023-07-25
编程技术问答社区
QTreeWidget editItem 失败时显示 "edit: editing failed" (编辑:编辑失败
我将QTreeWidgetItem添加到QTreeWidget: QTreeWidgetItem* item = new QTreeWidgetItem(ui->trwPairs); item->setFlags(item->flags() | Qt::ItemIsEditable); 如果编辑了项目,我想对新值进行一些检查: Pairs::Pairs(QWidget *parent) : QWidget(parent), ui(new Ui::Pairs) { ui->setupUi(this); connect(this->ui->trwPairs, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(Validate(QTreeWidgetItem*,int))); } void Pairs::Validate(QTreeWidgetItem* item, int column) { if (
102 2023-07-25
编程技术问答社区
QTreeWidget 右键菜单
我环顾四周,看来这个问题不仅存在于树小部件,而且还存在其他小部件.但是就我而言,我找到了一个解决方案,尽管这是一个不完整的解决方案.我正在为树小部件添加操作,以便当您右键单击它时,会出现带有这些动作的弹出窗口.但是,当我将项目添加到树小部件并右键单击它们时,出现相同的弹出窗口. 我想做的是,当您右键单击树小部件时,出现了树小部件弹出菜单,当您右键单击项目时,出现另一个相应的弹出菜单.有人知道该怎么做吗? 解决方案 首先,您应该设置上下文菜单策略 to CustomContextMenu : treeView->setContextMenuPolicy(Qt::CustomContextMenu); 然后您可以连接到您的上下文菜单. 其他解决方案 首先,config qtreewidget to with with with with with with wits(emit信号)右鼠标单击: treeWidget->setContextMenuPolicy(
12 2023-07-25
编程技术问答社区
QTreeWidget (为项目应用样式)
我有一个树小部件,树上有三个级别,如下所示 Example Tree ============================ LEVEL1 LEVEL2 LEVEL2 LEVEL3 LEVEL3 LEVEL2 LEVEL2 LEVEL1 我想根据项目的水平应用不同的样式,以便对我的级别1,Level2&Level3的样式不同.我可以用两层树来做到这一点.请帮忙.我想在CSS级别(而不触摸代码) 实现这一目标 我经过了文档.我猜区分Level1和Level2是困难的部分. 解决方案 这不能在qt样式级别 上完成 其他解决方案 我有一个主意,可能不太好. 您可以使用界面 qtreewidget :: setItemwidget(qtreewidgetItem *item,int列,qwidget *窗口小部件). 然后自定义小部件(您想要的一切).
10 2023-07-25
编程技术问答社区
用两个QTreeWidget进行拖放,根据它们之前设定的数据过滤QTreeWidgetItem's。
我是我的项目,我有两个qtreewidgets(假设A和B),我想从treewidget A拖动a到wreewidget B. 我有多个问题: 并非所有存储在A中的物品都应该是Draggale.在我的代码的其他部分,我通过在构造函数中定义"类型"来将它们分开: QTreeWidgetItem *newDatatype = new QTreeWidgetItem(TreeWidgetItemTypes::Datatype); 我可以使用以下方式检查它们: if(itemDroppedFromHeaven.type() == TreeWidgetItemTypes::Datatype) ... 因此,我有一个枚举来分开所有不同类型的项目. 拖放是否复制设置数据? 如何在拖动时检测物品类型? 如何设置启用/禁用某种项目的拖动? iv'e试图超载树翼B的dropevent,以过滤掉落的项目: class CustomTreeWidget
4 2023-07-17
编程技术问答社区
双击时的QTreeWidget展开动画
我已经创建了QTreeWidget并将动画设置为true(setAnimated(true)). 当我单击项目左侧的标记(三角形)时,它会顺利扩展,但是当我双击该项目时,它会扩展得太快(几乎就像没有"动画"标志集). 我也想双击双击时流畅的动画.我该如何解决这个问题? QTreeView呼叫QTreeViewPrivate::expandOrCollapseItemAtPos在标记点击和QTreeViewPrivate::expand双击时,我无法访问这些方法. 我正在使用Pyside来创建QT应用程序(但我尝试过C ++,问题是相同的). 解决方案 您需要覆盖点击行为.检查事件是否是双击,然后您可以将事件重定向到适当的呼叫.您应该检查状态是否已经单击,以防止可能发生的第二个动画. 其他解决方案 诀窍是,双击还单击默认实现中的单个单击. 在展开动画之前,默认实现调用QAbstractItemView::setState(AnimatingState)设置动画内
10 2023-07-17
编程技术问答社区