当前位置: 首页 > news >正文

如何在Qt Designer中管理QSplitter

问题描述

当按下按钮时,我希望弹出一个对话框,用户可以在其中选择内容并最终按下 ‘Ok’ 按钮。我想在这个对话框中放置一个 QSplitter,左侧面板将显示树状结构,右侧将显示其他内容。如何正确实现这一点?

从 Qt 的示例代码可以看出:

QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);

在这个示例中,splitter 是没有使用对话框资源创建的。如果我必须以这种方式创建,那意味着所有控件都需要在代码中创建,而不是使用 Qt Creator。

解答一

可以简单地在 Qt Designer 中创建包含控件的 QSplitter:

  1. 首先在 Designer 中将控件放置在对话框或 widget 中(它们不应位于布局中)。
  2. 选择你想放置在 splitter 中的控件(按住 CTRL 并点击它们)。
  3. 右键点击选中的控件,从布局菜单中选择“Lay Out Horizontally in Splitter”或“Lay Out Vertically in Splitter”。
  4. 现在对对话框应用一个网格布局,一切应该都正常了。你可以在对象检查器视图中看到类似的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

补充
  • 有用户指出在 splitter 中间的树控件占用了几乎 80% 的宽度,建议参考相关帖子,设置 stretch factor。

解答二

这是一个更详细的解决方法:

  1. 在某个 widget 容器内放置你需要的控件。例如,对于一个窗口,有一个 Widget 作为窗口,并在其中放置两个 widget,分别命名为 topContainer 和 bottomContainer。然后分别在这些容器中放置所需的控件,并为它们设置各自的布局。
  2. 不要选择主要容器,而是选择想分割的两个控件。实质上,你是在这两个控件之间放置一个 splitter,而不是在主要容器上。因此,在控件列表窗口中选择这两个控件,然后右键点击打开对话框菜单,滑动到布局选项,选择“Lay Out Vertically in Splitter”。
  3. 仍然需要在主要容器上应用一个布局。splitter 并不是一个布局,因此此时只需在主要容器上应用一个垂直布局即可。

关键在于:不是在包含待分割控件的主要容器上设置布局,而是通过选择待分割的控件并在它们之间添加一个 QSplitter。

解答三

在使用 Qt Designer 创建控件并使用 .ui 文件时,可以添加一个 QWidget 对象到对话框中。然后,在将要编写的 QDialog 派生类的构造函数中,使用 QWidget 对象作为父对象来创建 QSplitter。

这种方式可以使用 Qt Designer 来创建除 splitter 对象以外的所有控件。

总结

在 Qt Designer 中管理 QSplitter 主要有两种方法:直接在 Designer 中创建 splitter 并将控件加入其中,或者在 Designer 中创建控件,然后在代码中设置 splitter。选择哪种方法取决于项目的具体需求和个人的习惯。了解这两种方法以及相关的技巧将能帮助更有效地使用 Qt Designer 进行界面设计。

http://www.lryc.cn/news/385349.html

相关文章:

  • 关于新零售的一些思考
  • C++初学者指南-2.输入和输出---从输入流错误中恢复
  • 毫秒级响应!清科优能应用 TDengine 建设虚拟电厂运营管理平台
  • 【Ubuntu noble】apt 无法安装软件 Unable to locate package vim
  • Instagram APIj接口——快速获取Ins帖子媒体内容下载链接
  • Java基础(四)——字符串、StringBuffer、StringBuilder、StringJoiner
  • 吐血推荐!3款视频生成工具,全部国产,都免费
  • 【Web3】Web3.js 启动!并解决Web3 is not a constructor报错
  • 算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码网106 岛屿的周长
  • 搭建 MySQL MHA
  • python中的线程与进程
  • 网络安全筑基篇——反序列化漏洞
  • 帝国cms定时审核并更新的方法
  • 一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
  • 使用Spring Boot和WebSocket实现实时通信
  • 【Vue】集成富文本编辑器
  • 【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
  • 重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
  • APM教程-SkyWalking安装和配置
  • 斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”
  • World of Warcraft [CLASSIC] plugin lua
  • 背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?
  • CCSP自考攻略+经验总结
  • 面试突击:ArrayList源码详解
  • 力扣每日一题:2734. 执行子串操作后的字典序最小字符串
  • C++11中std::thread的使用
  • 酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统
  • 大数据之Hadoop部署
  • Java异常处理中的“throw”与“throws”的区别
  • 英语智汇学习系统