根据 QWizardPage 内容的变化动态添加/删除 Finish

2024-01-15

我正在关注 a 上的教程许可证向导 http://doc.qt.io/qt-5/qtwidgets-dialogs-licensewizard-example.html (using PyQt5)尝试学习如何创建非线性向导。然而我似乎陷入了一个问题。

我想要一个页面QComboBox其中所选项目确定当前是否QWizardPage包含组合框的页面是否为最终页面。

以下是该页面迄今为止包含的内容:

class CalibrationPageSource(QWizardPage):
    def __init__(self, parent):
        super(CalibrationPageSource, self).__init__(parent)
        self.setTitle('Calibration Wizard')
        self.setSubTitle('Select the source for the calibration')

        layout = QVBoxLayout()
        label = QLabel('''
            <ul>
                <li><b>From calibration file</b>: browse and select an existing YAML calibration file that contains the camera matrix and distortion coefficients (for example from a previous calibration)</li>
                <li><b>From image files</b>: browse and select one or more image files with the calibration pattern visible inside each</li>
                <li><b>From stream</b> - if the calibration node is connected to an active <b><i>Device node</i></b> you can use its image stream to interactively calibrate your device</li>
            </ul>
        ''')
        label.setWordWrap(True)
        layout.addWidget(label)

        layout_sources = QHBoxLayout()
        label_sources = QLabel('Source:')
        self.selection_sources = QComboBox()
        self.selection_sources.addItem('Calibration file')
        self.selection_sources.addItem('Image files')
        self.selection_sources.addItem('Stream')
        self.selection_sources.currentIndexChanged['QString'].connect(self.source_changed)
        self.selection_sources.setCurrentIndex(1)
        layout_sources.addWidget(label_sources)
        layout_sources.addWidget(self.selection_sources)
        layout.addLayout(layout_sources)

        self.setLayout(layout)

    @pyqtSlot(str)
    def source_changed(self, source):
        if source == 'Calibration file':
            self.setFinalPage(True)
            # TODO Add file dialog
        else:
            self.setFinalPage(False)
            # TODO Remove file dialog (if present)

每当self.selection_sources的当前项目更改为Calibration file我想跳过使页面最终确定的向导的其余部分。在这种情况下我想删除Next按钮。在所有其他情况下(目前只有两种:Image files and Stream)我想让向导正常工作,而不是作为最终页面。

我尝试过实施自定义isComplete(...)但问题是它同时禁用了Next and Finish when Calibration file被选中。我可以忍受有残疾人Next按钮(而不是完全隐藏它)但被禁用Finish对我来说基本上没有意义。我实际上很惊讶Next按钮存在。当到达最后一页时,它不是应该完全消失吗?

有什么想法如何解决这个问题吗?我考虑过迭代中的项目QWizardPage并手动禁用/隐藏Next按钮,但我希​​望有一种更简单、开箱即用的方法来做到这一点。在当前状态下动态插入Finish正在工作,但是由于Next按钮向导的转换未正确设置。


这已经晚了将近一年,但我想我已经弄清楚问题出在哪里了。您致电setFinalPage(True),只需在您的QWizardPage。它不会自动传播回您的QWizard.

只有一个信号可以传播信息:completeChanged https://doc.qt.io/qt-5/qwizardpage.html#completeChanged。这个名称有点误导,但文档似乎表明,如果您正确阅读它们,它就会执行您想要的操作:

如果你重新实现isComplete(),确保发出completeChanged()每当值isComplete()变化,以确保QWizard更新其按钮的启用或禁用状态。

事实上,遇到同样的问题,我能够通过这样做来解决它



if source == 'Calibration file':
    self.setFinalPage(True)
    ...
else:
    self.setFinalPage(False)
    ...
self.completeChanged.emit()
  

粗体线是新的。在这两种情况下都需要调用它,并且当您选择不同的选项时,会将按钮从“下一步”切换到“完成”并返回。

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

根据 QWizardPage 内容的变化动态添加/删除 Finish 的相关文章

  • 针对初学者的 QT 商业许可证与非商业许可证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 QT 许可似乎非常反学习 因为据我所知 用它开发的任何东西都只能是商业的当且仅当 its entire开发是在使用商业许可证的情况下完成的
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • QFileSystemModel setRootPath

    我正在尝试创建一个 Qt 应用程序来显示文件夹 Mac OS 中的 Users 文件夹 的内容 这是代码 QFileSystemModel dirModel new QFileSystemModel dirModel gt setRootP
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • Q风格所有权

    在 Qt 应用程序中使用样式时 我遇到了一个有趣的问题QStyle所有权 QStyle继承自QObject 通常接受QObject parent作为构造函数参数来管理其子级的生命周期 但QStyle的构造函数没有此构造函数参数 第一个问题
  • QObject 通用信号处理程序

    信号处理程序 是指插槽 而不是 POSIX 信号的处理程序 我需要 连接 可能不会 using QObject connect直接地 所有信号从 QObject 的 未知 子类的实例到一个单槽另一个 QObject 的 我需要这个才能通过网
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • CMake AUTOMOC,文件位于不同文件夹中

    我有一个简单的 CMake 项目 proj project folder a h a cpp CMakeLists txt CMakeLists txt cmake minimum required VERSION 3 2 set CMAK
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何部分或仅按百分比沿路径过渡

    我是 d3 的初学者 目前无法使用最新版本 但我使用的是 3 x 版本 我想要实现的应该很简单 但遗憾的是我没有找到有关如何做到这一点的资源 目标是在我的 svg 中显示一条路径 然后我想显示例如一个圆并沿着路径过渡 移动 追踪圆 如果我想
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • 一个具有完全透明背景的qt小部件

    我需要创建一个 qt 小部件 它将充当其他一些小部件的父级 并对它们进行排序 现在的问题是如何使其背景完全透明 我想这样做 struct Imp Imp QWidget parent thisWidget new QWidget paren
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • 当选项卡到另一个组件位置时,QML 中相应的滚动

    我想做的是 如果我从TextField到另一个组件 aComboBoxwtv 我希望滚动能够适应这一点 当我认为这非常重要时 当我执行连续选项卡时 我会转到滚动视图显示的内容下方的控件 一个例子是 假设我在这里 now i do 2 tab
  • 如何安装 C++ 的 VOCE?

    我正在尝试安装 VOCE api 它是为 C 和 Java 构建的语音识别 API 这是我第二次使用外部 C 库 也是第一次使用 Java C api 语音链接 http voce sourceforge net http voce sou
  • PyQt:在运行时向滚动区域添加小部件

    我试图在运行时通过按下按钮来添加新的小部件 在下面的示例中我使用标签 这里是例子 import sys from PyQt4 QtCore import from PyQt4 QtGui import class Widget QWidge
  • 如何为QTableView中的当前项目设置样式表

    When QTableView编辑控件对于发生编辑的当前项目可见 当窗口中没有活动的编辑控件时QTableView当前项目的样式使用QTableView selection background color 如何只为当前项目设置不同的样式

随机推荐

  • 如何使用 openjdk:7 Docker 镜像和 Gradle 包装器避免“EC 参数错误”?

    这个 Dockerfile FROM openjdk 7 WORKDIR restdocs RUN git clone https github com spring projects spring restdocs git restdoc
  • Jackson反序列化convertValue与readValue

    我有一个包含 JSONObjects 的 org json JSONArray 我正在尝试将它们映射到 POJO 我知道我想要映射到的 POJO 的类型 我有两个选择 我正在尝试找出哪个性能更好 选项1 ObjectMapper mappe
  • 在 php 中使用断言进行类型检查?

    我使用异常抛出函数对 php 中的类中的参数进行了一些检查 我有进行基本检查的功能 in array等 并在 false 时抛出异常 所以我可以做assertNumeric argument argument is not numeric
  • 使用 AngularJS 和 Highlight.js 进行动态语法突出显示

    我正在构建一个网站来说明常见的应用程序漏洞 例如 SQL 注入 我在用AngularJS and 高亮 js创建交互式示例 如何让 AngularJS 和highlight js 都更新我的代码片段 Example 这把小提琴 http j
  • 重复使用表格单元格中的 UIswitch

    我的 uiswitch 有问题UITableViewCell每当我更改属于特定部分的特定单元格中的开关值时 所有其他具有相同部分的单元格inexPath row改变 请帮忙 这是我的代码cellForRowAtIndexPath metho
  • 把一个偶数分成N份,每份都是2的倍数

    假设我有号码100我需要将其分为 N 部分 每个部分最初不应超过 30 因此初始分组为 30 30 30 余数 即 10 将通过连续向每个组添加 2 来分配到这三个组中 从而确保每个组都是 2 的倍数 因此 所需的输出应类似于 34 34
  • html DOM 节点限制

    我正在开发一个终端模拟器以获取乐趣 并了解后端的基础知识和运行 然而 我不断遇到前端的性能问题 大家可能都知道 终端窗口中的每个字符都可以有不同的样式 颜色 背景 粗体 下划线等 所以我的想法是使用 span 对于视图窗口中的每个字符 并在
  • 如何获取 Angular Material 滑块的当前值?

    我的问题与获取角度 2 中的 mdslider 值 https stackoverflow com questions 46906219 get mdslider value in angular 2因为我需要将滑块的值传递给组件 而不是
  • Java 中的 MidiUnavailableException?

    我在 Java 中播放 MIDI 文件时遇到一些问题 我得到的是一个MidiUnavailableException MIDI OUT transmitter not available 当我尝试玩它时 我的代码是标准的 try midis
  • 在 Python 中解压格式字符

    我需要这个 Perl 字符串的 Python 模拟 unpack nNccH string val 我需要nNccH Python 格式字符的数据格式 在 Perl 中 它将二进制数据解压为五个变量 网络 中的 16 位值 大端 网络 中的
  • 如何在 Vue.js 中延迟 @keyup 处理程序

    my view ns input filterName type text v model filterName keyup searchTimeOut 在我的 vue 代码中 getUsers API users index params
  • QStyledItemDelegate 绘制刷新问题

    我目前正在尝试研究模型视图方法并编写缩略图查看器应用程序 在此示例中 我只是尝试绘制 20 个框 但我得到的似乎是随机选择 该选择会随着鼠标移动而更新 滚动使事情变得更糟 有时绘制的只有框等 而且文本似乎根本没有渲染 对我来说 这看起来像是
  • 为什么我们需要strdup()?

    当我在做作业时 我开始知道我们不应该使用诸如以下的作业 char s HELLO WORLD 使用此类语法的程序很容易崩溃 我尝试并使用 int fun char temp do sum operation on temp print te
  • 在 CAS 中,如果尚未接受协议,如何限制仅访问一项服务?

    有一个要求 用户应该首先接受一些许可协议 存在仅在服务中 以便能够登录所有其他服务 所以流程应该是 用户通过CAS登录 因为他还没有接受协议 所以只能登录serviceS 当他接受serviceA上的协议后 他也可以登录其他服务 Notes
  • 选择后提交

    我读过解释时commit可能需要在selectDB2 和 MySQL 的语句 DB2 中的选择查询是否需要提交 https stackoverflow com questions 1521475 is a commit needed on
  • appengine 上的查询响应大小限制?

    Appengine 文档提到实体大小和批量获取请求 db get 的 1Mb 限制 http code google com appengine docs python datastore overview html http code g
  • Nginx/Web 服务器术语中的“反向代理”和“负载平衡”是什么?

    这是我经常听到的两个短语 主要与 Nginx 相关 有人可以给我一个外行的定义吗 定义通常很难理解 我想您只需要对其用例进行一些解释 简单解释一下就是 负载均衡是反向代理的功能之一 反向代理是可以做负载均衡的软件之一 下面给出了一个很长的解
  • 从大型数组中返回均匀“间隔”数量的索引。

    我有一个包含 20 个 RGB 颜色值的 Javascript 数组 如下所示 defaultColors rgb 58 185 180 rgb 63 186 172 rgb 71 185 159 rgb 80 185 146 rgb 90
  • PHP.net 说 md5() 和 sha1() 不适合密码?

    http www php net manual en faq passwords php faq passwords fasthash http www php net manual en faq passwords php faq pas
  • 根据 QWizardPage 内容的变化动态添加/删除 Finish

    我正在关注 a 上的教程许可证向导 http doc qt io qt 5 qtwidgets dialogs licensewizard example html using PyQt5 尝试学习如何创建非线性向导 然而我似乎陷入了一个问