如何实现基于树的QComboBox

2024-01-16

我怎样才能实现QComboBox http://qt-project.org/doc/qt-5/qcombobox.html允许您从树结构中进行选择,类似于QTreeView http://qt-project.org/doc/qt-5/qtreeview.html?


我想出了以下课程(TreeComboBox)使用developer.nokia.com上的两部分配方(Part 1 https://web.archive.org/web/20110906122617/http://www.developer.nokia.com/Community/Wiki/Implementing_QTreeView_in_QComboBox_using_Qt-_Part_1, Part 2 https://web.archive.org/web/20130707175929/http://www.developer.nokia.com/Community/Wiki/Implementing_QTreeView_in_QComboBox_using_Qt-_Part_2):

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class TreeComboBox(QComboBox):
    def __init__(self, *args):
        super().__init__(*args)

        self.__skip_next_hide = False

        tree_view = QTreeView(self)
        tree_view.setFrameShape(QFrame.NoFrame)
        tree_view.setEditTriggers(tree_view.NoEditTriggers)
        tree_view.setAlternatingRowColors(True)
        tree_view.setSelectionBehavior(tree_view.SelectRows)
        tree_view.setWordWrap(True)
        tree_view.setAllColumnsShowFocus(True)
        self.setView(tree_view)

        self.view().viewport().installEventFilter(self)

    def showPopup(self):
        self.setRootModelIndex(QModelIndex())
        super().showPopup()

    def hidePopup(self):
        self.setRootModelIndex(self.view().currentIndex().parent())
        self.setCurrentIndex(self.view().currentIndex().row())
        if self.__skip_next_hide:
            self.__skip_next_hide = False
        else:
            super().hidePopup()

    def selectIndex(self, index):
        self.setRootModelIndex(index.parent())
        self.setCurrentIndex(index.row())

    def eventFilter(self, object, event):
        if event.type() == QEvent.MouseButtonPress and object is self.view().viewport():
            index = self.view().indexAt(event.pos())
            self.__skip_next_hide = not self.view().visualRect(index).contains(event.pos())
        return False


app = QApplication([])

combo = TreeComboBox()
combo.resize(200, 30)

parent_item = QStandardItem('Item 1')
parent_item.appendRow([QStandardItem('Child'), QStandardItem('Yesterday')])
model = QStandardItemModel()
model.appendRow([parent_item, QStandardItem('Today')])
model.appendRow([QStandardItem('Item 2'), QStandardItem('Today')])
model.setHeaderData(0, Qt.Horizontal, 'Name', Qt.DisplayRole)
model.setHeaderData(1, Qt.Horizontal, 'Date', Qt.DisplayRole)
combo.setModel(model)

combo.show()
app.exec_()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现基于树的QComboBox 的相关文章

  • 使用 Qt 在 xoverlay 之上绘制

    我希望在使用 Xoverlay 渲染的视频流之上绘制一些 UI 我正在使用 gstreamer 播放视频并使用 xoverlay 在 xvimagesink 上渲染它 我的小部件继承自 QGLWidget 我希望使用 QPainter 绘制
  • QDomDocument 无法设置带有 标记的 HTML 文档的内容

    当我使用QDomDocument对于 HTML 内容 如果存在则无法设置内容在文档的开头 但实际上为什么 例如 考虑以下代码片段 QDomDocument doc QString content a href bar foo a qDebu
  • 使用 Poppler Qt4 C++

    我需要在我的应用程序中使用 pdf 查看器库 我使用 C 和 QT 我下载了Poppler http poppler freedesktop org 和代码示例Poppler Qt4 界面库 http people freedesktop
  • Qt 对象的生命周期

    Qt 对象的生命周期是多少 Such as QTcpSocket socket new QTcpSocket 套接字什么时候会被销毁 我应该使用 delete socket 有什么区别吗 QTcpSocket socket 我找不到有关此的
  • pyqt5调用url时处于无响应状态

    我刚刚在 pyqt 中实现了登录 但在调用 url 和获取响应之间 qt 窗口显示无响应状态 谁能建议我如何避免不响应状态 code class Login QDialog def init self height width parent
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • 什么时候应该首选 Loader 而不是 createQmlObject,反之亦然 - QML?

    两者都可以动态创建对象 什么时候应该Loader优先于Qt createQmlObjectQML 中反之亦然吗 The Loader可以被视为特定对象的占位符 它还使您能够通过Loader s id Qt createQmlObject通常
  • 为 Visual Studio 2012 编译 Qt 4.8.x

    我应该采取哪些步骤来编译适用于 Visual Studio 2012 的 Qt 版本 4 8 x 我已经仔细遵循了已接受答案中的说明这个问题 https stackoverflow com questions 5601950 how to
  • ExtJS EditorGridPanel 中的级联组合框

    我有一个正在运行的 EditorGrid 面板 其中两列有 ComboBox 编辑器 两个组合框都是从数据库远程加载的 countryStore and cityStore 我想限制cityComboBox仅显示所选国家 地区的城市 我需要
  • Mac OS X 文件关联有效,但文件图标未更改

    我使用 Qt 5 3 2 开发了一个 Mac 应用程序 该应用程序处理具有特定扩展名的文件 比方说 xyz 我创建了一个名为 XYZ icns 的图标文件 并将其添加到我的应用程序包资源文件夹中 MyApp app Contents Res
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • Qt + win32 + mingw 上的原生 Windows API 链接问题

    我正在尝试使用 mingw 工具集将本机 Windows API 与 Qt 结合使用 部分功能存在链接问题 会发生什么 这是 mingw 名称修改的错误吗 ifdef Q WS WIN HWND hwnd QWidget winId HDC
  • 如何在Python中创建一个派生自QObject的抽象基类

    我正在尝试为接口创建一个抽象基类 但我需要它从 QObject 派生信号和槽 我的类定义如下 import abc from PyQt5 QtCore import QObject class interface class abc ABC
  • 我的 QSqlQueryModel 不在列表视图中显示数据

    我正在玩 QSqlQueryModel 但我现在完全陷入困境 我一整天都在寻找解决方案 但到目前为止还没有运气 我所做的工作是它从我的 sqlite 数据库中提取数据 但由于某种原因我无法在列表视图中显示它 我的角色名似乎不存在 对于我从数
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • 使用 PyQt5 拖放 QLabels

    我正在尝试使用 PyQt5 将 Qlabel 拖放到另一个 Qlabel 上 from PyQt5 QtWidgets import QApplication QWidget QToolTip QPushButton QMessageBox
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http

随机推荐

  • Typescript 加载器在编译时抛出多个“重复标识符..”错误

    我今天将一个项目从我的工作站移至我的家用电脑 现在我无法再编译它了 每当我运行 webpack 时 我都会收到以下错误 TS2300 Duplicate identifier Request ERROR in at loader C Use
  • 删除包装 div 并保持所有子 div 完好无损?

    我有一个包装 div 里面有几个子 div 这些子 div 里面也有标签 我想删除包装 div 我考虑过 JQuery 的展开 但似乎我需要指定子 div 来告诉 Jquery 展开什么 如果有几个孩子 这可行吗 所以 代码如下 div d
  • 如何使用 conda MatchSpec?

    如何列出 conda 可用的软件包版本 https stackoverflow com questions 43222407 how to list package versions available with conda 4755625
  • 在sequelize中创建新项目时id: null

    当我尝试创建一个新的对话项目时 Sequelize 将返回一个带有以下内容的对象 id null即使数据库中有有效的 id 如何让 Sequelize 将最后插入的 id 返回到新创建的项目 Conversation create type
  • 如何在JPA存储库中编写动态查询?使用Java springboot。规范是答案吗?

    我在 JPA 存储库中有一个项目 我想使用 UNIONS 和响应参数从两个表中检索值 并且我成功执行了以下本机查询 Public interface resultRepository extends JpaRepository
  • SQL - 获取所有一对多关系的平均分

    我的问题和分数之间存在一对多的关系 我的表设置是 Table Question id int auto increment primary key question varchar 255 Table Score id int auto i
  • 如何使用 OpenGL 正确处理 Alpha 合成

    我正在使用glBlendFunc GL SRC ALPHA GL ONE MINUS SRC ALPHA 正如文档所述 实际上 Direct3D 文档中也说了同样的事情 一开始一切都很好 直到我从 GPU 下载结果并将其制作为 PNG 图像
  • 使用pointinterval减少点数

    With pointinterval 可以告诉 Gnuplot 何时在线上插入点 现在 通过将其设置为 1 线不会穿过该点 例如 pi 1 lt gt lt gt lt gt lt gt lt gt lt gt lt gt lt gt lt
  • SonarQube 分析成功,但服务器未处理

    我最近将 SonarQube 服务器从 5 1 2 升级到 5 2 我们通过 Jenkins 使用 SonarQube Runner 2 4 运行分析 并且分析成功 问题是服务器不会处理分析 在针对失败的后台任务显示的日志末尾可以看到以下错
  • 使用 MessageContract 时,Webservice Response 会变成 ref 参数

    我定义了以下接口 ServiceContract public interface IHealthProducts OperationContract ResponseClass OrderSelfSignedHealthCertifica
  • 机架会话在 Chrome 中丢失

    我有一个非常简单的应用程序 托管在 EC2 上 使用 Sinatra 构建 并在 nginx 后面提供 Thin 服务 问题是 对于 Chrome 会话变量在 Sinatra 中会 丢失 在 Firefox 中不会发生这种情况 这是使用 R
  • 检测 Windows 还是 Linux? [复制]

    这个问题在这里已经有答案了 我正在寻求在 Windows 和 Linux 上运行通用的 Java 程序 该程序需要在每个平台上做一些不同的事情 那么我的 Java 程序如何 应该检测它是在 Linux 下运行还是在 Windows 下运行
  • Firebase 远程配置根据初始请求得出结果

    我正在使用单例从 Firebase 远程配置文件中获取参数 第一次运行应用程序时 我只能从单例中访问默认值 后续运行正确返回配置的值 有什么更好的方法可以做到这一点 以便我可以从新的开始访问这些值 protocol RemoteConfig
  • 如何缩放基于 FFT 的互相关,使其峰值等于 Pearson's rho

    问题描述 FFT 可用于计算两个信号或图像之间的互相关 确定两个信号之间的延迟或滞后A and B 只需定位以下峰值 IFFT FFT A conjugate FFT B 然而 峰值的幅度与各个信号的频谱的幅度相关 从而确定皮尔逊相关系数
  • iOS 应用程序蓝牙音频以“电话模式”出现。

    我有一个 iOS 应用程序 可以生成文本转语音 TTS 音频 AVSpeechSynthesizer 一位用户表示 他的汽车蓝牙扬声器上的音频以 电话模式 大概是拨打或接听电话时的音频 发出 而不是像 Youtube 以及音乐和地图应用程序
  • Google API:获取联系人照片

    通过遵循 API 我已经能够检索除联系人照片之外的所有内容 我可以从返回的 xml 中获取 img url 以及 gd etag 下面是 Google API 示例 这与我得到的结果是一样的 当然对于我的联系人来说 属性值是不同的 问题是我
  • Woocommerce:如何删除结账页面上的产品线?

    就像在购物车中一样 我怎样才能使用 x 链接删除结帐页面中的产品 有什么钩子可以做到这一点吗 thanks 我也遇到了同样的问题 谷歌也没找到解决的方法 所以我自己尝试并找到了这个解决方案 在您的主题中的结帐页面上覆盖 woocommerc
  • 服务引用下的哪些文件属于源代码管理。 (视觉工作室)

    我对 WPF 和 WCF 都很陌生 并且有一个 WPF 应用程序 该应用程序具有对 WCF 应用程序的服务引用 我在 Service References MyService 下创建了各种文件 我不太确定哪些需要进入源代码管理 哪些不需要
  • 跳转到文件而不修改跳转列表

    我正在编写一个类似标签的插件 它应该能够跳转到给定的文件 行和列 I use edit跳转到正确的文件 然后G 跳转到正确的位置 如所解释的here https stackoverflow com a 19195792 110081 我的问
  • 如何实现基于树的QComboBox

    我怎样才能实现QComboBox http qt project org doc qt 5 qcombobox html允许您从树结构中进行选择 类似于QTreeView http qt project org doc qt 5 qtree