Qt5.9 UI设计(五)——将Tabwidget与treeWidget相互关联
前言
前面一章介绍了ControlTabWidget ControlTreeWidget maintitlebar 三个子页面同时布局到 mainwindow 的方法,本章介绍如何将ControlTreeWidget 与ControlTabWidget 联动。
(一)TabWidget子页面实现
在maincontent 目录下创建
otaparatarnsmittelnettester五个目录,用来分别实现与ControlTabWidget的五个子页面。- 使用添加UI的方式,添加
otaparatarnsmittelnettester五个类。

- 使用添加UI的方式,添加
将刚刚创建的5个widget类添加到可提升的类中

将对应的页面提升为对应的类,这样就可以独立设计每个子页面了

第一页设置到前面,也就是打开显示在最上面的为第一页

添加一个 globaldef.hpp 全局文件,用来定义一些共用的结构体等信息

(二)ControlTabWidget 方法实现
- 创建一个
MapWidget容器,将页面索引和页面指针关联起来 - 创建方法
initValue,初始化的时候将各个页面信息填充到MapWidget 容器里 - 创建信号发送函数
sendShowIndex,用来发送切换信号 - 创建槽函数
receiveShowCurrentTab,用来接收sendShowIndex 发送过来的信号,在该方法中,需要根据接收到的信号切换到对应的界面进行显示
#ifndef CONTROLTABWIDGET_H
#define CONTROLTABWIDGET_H
#include <QWidget>
#include "globaldef.hpp"
namespace Ui {
class ControlTabWidget;
}
typedef struct TabWidgetData
{
QWidget *currentWidget;
QString currentTabText;
}TabWidgetData;
using MapWidget = QMap<WidgetTabType, TabWidgetData>;
class ControlTabWidget : public QWidget
{
Q_OBJECT
public:
explicit ControlTabWidget(QWidget *parent = 0);
~ControlTabWidget();
signals:
void sendShowIndex(WidgetTabType);
private slots:
void receiveShowCurrentTab(WidgetTabType widgetTabType);
private:
Ui::ControlTabWidget *ui;
void initValue(void);
MapWidget mapTabWidget;
};
#endif // CONTROLTABWIDGET_H
(三)ControlTreeWidget 方法实现
initValue进行样式的设置on_treeWidget_clicked为按键事件处理槽函数sendShowIndex添加发送信号方法
#ifndef CONTROLTREEWIDGET_H
#define CONTROLTREEWIDGET_H
#include <QWidget>
#include "globaldef.hpp"
namespace Ui {
class ControlTreeWidget;
}
class ControlTreeWidget : public QWidget
{
Q_OBJECT
public:
explicit ControlTreeWidget(QWidget *parent = 0);
~ControlTreeWidget();
signals:
void sendShowIndex(WidgetTabType);
private slots:
void on_treeWidget_clicked(const QModelIndex &index);
private:
Ui::ControlTreeWidget *ui;
void initValue();
};
#endif // CONTROLTREEWIDGET_H
on_treeWidget_clicked可以使用下面方式设置- 在UI界面右键,选择转到槽函数
- 选择按键事件,OK,然后系统会自动创建该方法,我们只需要实现方法里面的内容就可以了。


(四) 将 ControlTabWidget 与 ControlTreeWidget 关联起来
- 在
MainWindow中创建connect连接 - 将
widgetTree的信号发送sendShowIndex方法 与widgetTab 的receiveShowCurrentTab信号接收槽函数相关联。 - 这样就可以实现点击treeWidget的选项,然后跳到对应的tabwidget界面
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->widgetTree, SIGNAL(sendShowIndex(WidgetTabType)), ui->widgetTab, SLOT(receiveShowCurrentTab(WidgetTabType)));
}
- 最终图像效果如下图:

总结
本章实现了ControlTreeWidget 与ControlTabWidget联动的功能,下面一章我们将介绍TileBar 功能的实现。
本章工程名为:page_sample_03.rar
完整工程下载地址,请到 liwen01 微信公众号中回复: QT 获取
---------------------------End---------------------------
长按识别二维码
关注 liwen01 公众号
Qt5.9 UI设计(五)——将Tabwidget与treeWidget相互关联的更多相关文章
- Qt5.9 UI设计(七)——统一样式设计
前言 前面已经将UI设计部分实现,各页面也做了最简单的设计,本章介绍一下qss样式的使用.样式设计最终的显示效果如下图: 操作步骤 将stylesheet.qss 样式文件添加进工程 styleshe ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- 游戏UI框架设计(五): 配置管理与应用
游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所 ...
- 五十个UI设计资源网站
五十个UI设计资源网站 用户体验团队网站 1.UCD大社区 http://ucdchina.com/ 2.腾讯WSD http://wsd.tencent.com/ 3.腾讯CDC http://cd ...
- (2018干货系列五)最新UI设计学习路线整合
怎么学UI全链路设计 全链路设计师是参与整个商业链条,为每个会影响用户体验的地方提供设计的可解决方案,最后既满足了商业目标,又提升了产品的用户体验和设计质量,与平面设计.UI设计彻底区分开来,是真正的 ...
- 缩放因子和UI设计
一.PPI 1.像素密度PPI:PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目. 根据勾股定理(直角三角形两边为a和b,斜边为c, ...
- UI设计中px、pt、ppi、dpi、dp、sp之间的关系
UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...
- 从Web借鉴UI设计
从Web借鉴UI设计 用户体验已经成为衡量应用软件质量的重要标准.在过去我们可能会惊叹于某个Web应用的华丽界面,现在,随着HTML5的强势登场,各类表现层技术及开发框架的发布,Web与窗体应用的界限 ...
- UI设计(流程/界面)设计规范
1.UI设计基本概念与流程 1.1 目的 规范公司UI设计流程,使UI设计师参与到产品设计整个环节中来,对产品的易用性进行全流程负责,使UI设计的流程规范化,保证UI设计流程的可操作性. 1.2范围 ...
- Android UI设计
Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...
随机推荐
- 用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?
Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一个关键时刻.这一突破性的版本引入了一系列革命性的功能,包括: 虚拟线程:利用 Project L ...
- 解决 cv2.destroyAllWindows() 无效问题
方法一 示例代码: import cv2 import numpy as npimg = np.zeros((512,512),np.uint8)#生成一个空灰度图像 cv2.line(img,(0, ...
- 2020-11-05:谈一下TCP的拥塞控制。
福哥答案2020-11-05: 所谓拥塞控制,是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载.出现拥塞时,端点并不了解到拥塞发生的细节,对通信连接的端点来说,拥塞旺旺表现为通信时延的增加 ...
- EDS从小白到专家丨打造你的专属“数据物流”系统
"数据快递"如何支撑便捷就医?本期让我们来了解如何使用EDS打造专属的"数据物流"系统...... 本文分享自华为云社区<[EDS从小白到专家]第2期-E ...
- 开发的必杀技:Git 的分支管理
摘要:作为一名码农,Git的使用就像家常便饭,时时刻刻都要用到,那么Git分支管理也是必须要掌握的. Git 分支管理 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离 ...
- Weex原理及架构剖析
早期H5和Hybrid方案的本质是,利用客户端App的内置浏览器(也就是webview)功能,通过开发前端的H5页面满足跨平台需求.比如PhoneGap cordova ionic -- 该方案提升开 ...
- vite/storybook/rollup搭建一个自己的组件库
构建测试项目 首先vite 初始化一个项目 vue create story-book-demo ## 或者 vue create story-book-demo 然后添加storybook ,具体参 ...
- 火山引擎 DataTester:A/B 实验如何实现人群智能化定向?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在精细化运营时代,用户需求和业务场景愈加多元,在产品功能迭代以及各类活动中,面向不同人群的兴趣点,有针对性地&qu ...
- 火山引擎 DataTester:构建增长闭环,3-5 人即可搭建企业增长团队
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 增长是一个老生常谈的话题,对许多企业而言这个词都很熟悉,但在实践过程中仍然有很多的疑问,比如指标体系应该怎么搭建? ...
- 高性能 Jsonpath 框架,Snack3 3.2.57 发布
Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表示,ONode也 ...