前言

前面一章介绍了ControlTabWidget ControlTreeWidget maintitlebar 三个子页面同时布局到 mainwindow 的方法,本章介绍如何将ControlTreeWidgetControlTabWidget 联动。

(一)TabWidget子页面实现

  1. 在maincontent 目录下创建 ota para tarnsmit telnet tester 五个目录,用来分别实现与ControlTabWidget的五个子页面。

    1. 使用添加UI的方式,添加 ota para tarnsmit telnet tester 五个类。

  2. 将刚刚创建的5个widget类添加到可提升的类中

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

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

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

(二)ControlTabWidget 方法实现

  1. 创建一个 MapWidget 容器,将页面索引和页面指针关联起来
  2. 创建方法 initValue ,初始化的时候将各个页面信息填充到MapWidget 容器里
  3. 创建信号发送函数 sendShowIndex ,用来发送切换信号
  4. 创建槽函数 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 方法实现

  1. initValue 进行样式的设置
  2. on_treeWidget_clicked 为按键事件处理槽函数
  3. 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
  1. on_treeWidget_clicked 可以使用下面方式设置

    1. 在UI界面右键,选择转到槽函数
    2. 选择按键事件,OK,然后系统会自动创建该方法,我们只需要实现方法里面的内容就可以了。



(四) 将 ControlTabWidget 与 ControlTreeWidget 关联起来

  1. MainWindow 中创建 connect 连接
  2. widgetTree 的信号发送 sendShowIndex 方法 与widgetTab 的 receiveShowCurrentTab 信号接收槽函数相关联。
  3. 这样就可以实现点击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)));
}
  1. 最终图像效果如下图:

总结

本章实现了ControlTreeWidgetControlTabWidget联动的功能,下面一章我们将介绍TileBar 功能的实现。

本章工程名为:page_sample_03.rar

完整工程下载地址,请到 liwen01 微信公众号中回复: QT 获取

---------------------------End---------------------------
长按识别二维码
关注 liwen01 公众号

Qt5.9 UI设计(五)——将Tabwidget与treeWidget相互关联的更多相关文章

  1. Qt5.9 UI设计(七)——统一样式设计

    前言 前面已经将UI设计部分实现,各页面也做了最简单的设计,本章介绍一下qss样式的使用.样式设计最终的显示效果如下图: 操作步骤 将stylesheet.qss 样式文件添加进工程 styleshe ...

  2. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  3. 游戏UI框架设计(五): 配置管理与应用

    游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所 ...

  4. 五十个UI设计资源网站

    五十个UI设计资源网站 用户体验团队网站 1.UCD大社区 http://ucdchina.com/ 2.腾讯WSD http://wsd.tencent.com/ 3.腾讯CDC http://cd ...

  5. (2018干货系列五)最新UI设计学习路线整合

    怎么学UI全链路设计 全链路设计师是参与整个商业链条,为每个会影响用户体验的地方提供设计的可解决方案,最后既满足了商业目标,又提升了产品的用户体验和设计质量,与平面设计.UI设计彻底区分开来,是真正的 ...

  6. 缩放因子和UI设计

    一.PPI 1.像素密度PPI:PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目. 根据勾股定理(直角三角形两边为a和b,斜边为c, ...

  7. 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) 声明:本文由入驻搜狐公众 ...

  8. 从Web借鉴UI设计

    从Web借鉴UI设计 用户体验已经成为衡量应用软件质量的重要标准.在过去我们可能会惊叹于某个Web应用的华丽界面,现在,随着HTML5的强势登场,各类表现层技术及开发框架的发布,Web与窗体应用的界限 ...

  9. UI设计(流程/界面)设计规范

    1.UI设计基本概念与流程 1.1 目的 规范公司UI设计流程,使UI设计师参与到产品设计整个环节中来,对产品的易用性进行全流程负责,使UI设计的流程规范化,保证UI设计流程的可操作性. 1.2范围  ...

  10. Android UI设计

    Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...

随机推荐

  1. 用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?

    Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一个关键时刻.这一突破性的版本引入了一系列革命性的功能,包括: 虚拟线程:利用 Project L ...

  2. 解决 cv2.destroyAllWindows() 无效问题

    方法一 示例代码: import cv2 import numpy as npimg = np.zeros((512,512),np.uint8)#生成一个空灰度图像 cv2.line(img,(0, ...

  3. 2020-11-05:谈一下TCP的拥塞控制。

    福哥答案2020-11-05: 所谓拥塞控制,是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载.出现拥塞时,端点并不了解到拥塞发生的细节,对通信连接的端点来说,拥塞旺旺表现为通信时延的增加 ...

  4. EDS从小白到专家丨打造你的专属“数据物流”系统

    "数据快递"如何支撑便捷就医?本期让我们来了解如何使用EDS打造专属的"数据物流"系统...... 本文分享自华为云社区<[EDS从小白到专家]第2期-E ...

  5. 开发的必杀技:Git 的分支管理

    摘要:作为一名码农,Git的使用就像家常便饭,时时刻刻都要用到,那么Git分支管理也是必须要掌握的. Git 分支管理 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离 ...

  6. Weex原理及架构剖析

    早期H5和Hybrid方案的本质是,利用客户端App的内置浏览器(也就是webview)功能,通过开发前端的H5页面满足跨平台需求.比如PhoneGap cordova ionic -- 该方案提升开 ...

  7. vite/storybook/rollup搭建一个自己的组件库

    构建测试项目 首先vite 初始化一个项目 vue create story-book-demo ## 或者 vue create story-book-demo 然后添加storybook ,具体参 ...

  8. 火山引擎 DataTester:A/B 实验如何实现人群智能化定向?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在精细化运营时代,用户需求和业务场景愈加多元,在产品功能迭代以及各类活动中,面向不同人群的兴趣点,有针对性地&qu ...

  9. 火山引擎 DataTester:构建增长闭环,3-5 人即可搭建企业增长团队

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 增长是一个老生常谈的话题,对许多企业而言这个词都很熟悉,但在实践过程中仍然有很多的疑问,比如指标体系应该怎么搭建? ...

  10. 高性能 Jsonpath 框架,Snack3 3.2.57 发布

    Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表示,ONode也 ...