默认情况下,a QTreeWidget
管理行的选择(当您单击一行时,它会突出显示该行,当您单击另一行时,它会突出显示该行并取消选择上一行),我不希望这样做,也无法弄清楚如何将其关闭。
我有一个QTreeWidget和一堆QTreeWidgetItems.每个项目都有几列.当其中一列宽度小于窗口小部件的宽度时,底部会有一个滚动条.当我在比窗口小部件更宽的列中单击QTreeWidgetItem时,QTreeWidget将自动滚动以尝试尽可能多地获取窗口小部件中的列.我不希望这种情况发生.我怎么关掉这个?
正如我在过去几个月中多次发布的那样,我正在Qt写一篇期刊/日记应用程序.条目按年,月,日和条目(按天分类条目的默认配置)或年,月和条目(同一月份的所有条目分组在一起)在QTreeWidget中排序
入口节点有两列:第一列是可见的并保存条目名称.第二列是不可见的,并保存数据库中相应条目的行号.选择该条目后,程序将根据该行号执行选择查询并显示内容.Root,year,month,(和day,如果已启用)节点也有第二列,但其中的行号始终为-1.(有效行数从0开始)
日志工具栏已具有后退和前进按钮,用户可以查看下一个和上一个条目.虽然此功能已经有效,但树中当前选定的项目不会随之改变,而这正是我想要解决的问题.
我已经确定最好的方法是使用循环函数扫描每个的第二个隐藏列值,直到找到正确的行号.每次单击后退/前进按钮都会再次调用此功能,因此一旦我开始工作,所选节点将始终与正在查看的当前条目匹配.
缺点是如果数据库变得庞大,这种方法可能会很慢,但我无能为力.用户可能会删除条目或将其随机播放,因此仅依靠rownumber ++或rownumber--可能会导致问题.由于数据库没有填写缺失的行号但只是继续下一行,如果程序总是假定数据库中的每一行在任何给定时间仍然存在,则可能会出现问题.
我的问题是如何扫描QTreeWidget中每个节点的特定列?
我是一名学生程序员,使用Qt开发GUI应用程序.我正在使用QTreeWidget来显示存储在向量中的一些属性.在同一个窗口中,我有按钮编辑,复制和删除.到目前为止,这些按钮可以满足他们的需求; 但是当我没有选择任何东西时,我遇到了问题.我的程序意外地完成了; 我猜一个段错误.我不认为我正在处理正确选择的currentItem.但是,如果没有选择任何内容,Qt的文档就没有说明返回的内容.所以我希望有更多经验的人帮助/启发我.如果有什么东西你想看看包含的代码的一面只是问.这是我的(相关)代码:
#include "injectiongui.h"
#include "ui_injectiongui.h"
#include "injectiondialog.h"
#include "ui_injectiondialog.h"
#include "injectiondata.h"
#include <QMessageBox>
InjectionGUI::InjectionGUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::InjectionGUI)
{
ui->setupUi(this);
ui->groupBoxGlobalParticlesPerCell->hide();
connect(ui->pushButtonEdit, SIGNAL(clicked()), this, SLOT(slotInjectionEdit()));
}
void InjectionGUI::buildTreeWidget()
{
//Build or Refresh Tree Widget with info from the vector
}
void InjectionGUI::editInjection_Clicked(QTreeWidgetItem *itemToEdit) //Creates an Injection Dialog to edit an Item from the Vector
{
QString converter = itemToEdit->text(0);
int id = converter.toInt();
InjectionDialog editInjectionDialog;
InjectionData presetValues;
if(itemToEdit == 0) // this was my attempt …
Run Code Online (Sandbox Code Playgroud) QtreeWidget顶部有一个1.我如何解决它?
我有一个简单的问题。我想像普通文件浏览器一样在 QTreeWidget 中显示我的文件系统。
我怎样才能做到这一点?我想搜索所有文件并手动添加它们不是选择的方法,对吗?
我正在 PySide 中为 Maya(3D 软件)构建一个工具,它可以自动版本并将文件保存在一个目录中。
过去几天我一直在尝试将我的初始 QTreeWidget 代码转换为带有 QTreeView 和 QAbstractItemModel 的模型/视图模式,以获取工具提示和其他功能,但我发现这比预期的要难。当我学习一种新的编码语言/技术时,我喜欢找到两个做同样事情的脚本——一个使用新技术,一个使用旧技术。这样我就可以比较和分解新代码正在做什么。
我最大的障碍是我很难找到一个 QTreeView 示例来完成我的 QTreeWidget 示例。此外,大多数示例手动填充 QTreeView 这对我也没有多大帮助。如果有人可以修改 QTreeView 代码,这样它就可以完成我的 QTreeWidget 代码所做的事情,那就太好了。对 QTreeView 最佳实践的评论也很棒!
我的 QTreeWidget 代码目前...
1) 从源获取字符串列表并将它们列在第一列中
2) 从每个字符串中获取日期并将其放在第二列中
QTreeView 代码:
from PySide import QtCore, QtGui
from shiboken import wrapInstance
import maya.OpenMayaUI as mui
import sys, os
def get_parent():
ptr = mui.MQtUtil.mainWindow()
return wrapInstance( long( ptr ), QtGui.QWidget )
################################################################################
class MyTree(QtGui.QMainWindow):
def __init__(self, parent=get_parent() ):
super(MyTree, self).__init__(parent)
data = MyData.init()
frame = QtGui.QFrame();
frame.setLayout( QtGui.QHBoxLayout() ); …
Run Code Online (Sandbox Code Playgroud) 我对 Python 还很陌生,所以请耐心等待。我试图从元组填充 QTreeWidget,但我似乎无法让它太工作。
TreeList = ({
'Header1': ((
'Item1',
'Item2',
)),
'Header2': ((
'Item1',
'Item2'
))
})
Run Code Online (Sandbox Code Playgroud)
这个想法是我想创建一个 QTreeWidget 看起来像:
ROOT
|
|-- Header1
| |-- Item1
| |-- Item2
|
|-- Header2
|-- Item1
|-- Item2
Run Code Online (Sandbox Code Playgroud)
我一直在网上搜索以找到解决方案,但我尝试的任何方法似乎都不起作用,解决此问题的最佳方法是什么。
widget = QTreeWidget()
for i in TreeList:
val = QTreeWidgetItem([i])
widget.addTopLevelItem(val)
for i in TreeList['Header1']
val = QTreeWidgetItem([i])
widget.Header1.addChild(val) # DONT THINK THIS IS RIGHT
for i in TreeList['Header2']
val = QTreeWidgetItem([i])
widget.Header2.addChild(val) # DONT THINK THIS IS RIGHT
Run Code Online (Sandbox Code Playgroud)
第一个 for …
对于这个问题,我指的是@Andy PyQt Tree Widget的答案,添加了动态删除复选框
@Andy 展示了如何添加CheckBox
到 中QTreeWidget
,效果很好。
我想在这里问,如何添加RadioButton
到QTreeWidget
?----而且,这对我来说更困难,如何使只有一个项目可供选择,尽管它们不同groups
?
我将@Andy 中的代码重写为 PyQt5:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
def main():
app = QApplication (sys.argv)
tree = QTreeWidget ()
headerItem = QTreeWidgetItem()
item = QTreeWidgetItem()
for i in range(3):
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
for x in range(5):
child = QTreeWidgetItem(parent)
child.setFlags(child.flags() | Qt.ItemIsUserCheckable) …
Run Code Online (Sandbox Code Playgroud) 我有一个QTreeWidget
并且我有一个应用于它的样式表。我希望其中一些QTreeWidgetItem
具有与其他样式表样式项目不同的颜色hover
和颜色。selected
我normal
为状态着色setData(columnNumber, Qt::ForegroundRole, colorName)
,但无法更改悬停和选定状态的颜色。
有谁知道是否可以通过Qt
某种方式实现这一目标?
谢谢!
qtreewidget ×10
qt ×7
python ×5
c++ ×3
pyqt ×3
pyqt5 ×2
pyside ×1
python-3.x ×1
qradiobutton ×1
qstyle ×1
qtreeview ×1
qwidget ×1
scroll ×1
stylesheet ×1
user-input ×1