目标:

1. 代码更加紧凑,所写即所到。

2. 代码层次更直观,直接反映界面窗口层次关系。

3. 不继承类,不重写虚函数,slot接收QEvent。

4. 简单写布局,忘掉api函数。

5. 免去一大堆临时变量的变量名。

思路:

operator () (QLayout*) 开始一个布局

operator () (QWidget*) 开始一个窗口元素,并将元素加入到布局

operator [] <T> (const T&) 设置布局或窗口元素的属性

operator [] (lambda) 设置一个元素的事件回调

zqt_helper项目地址https://github.com/bbqz007/zhelper-qt5Widgets, 适用于Qt5 Widgets。

zwx_helper项目地址https://github.com/bbqz007/zhelper-wxWidgets , 适用于 wxWidgets。

使用zqt_helper如何写Qt Widgets 布局:

layout::begin                            // 最外层垂直布局
(new QVBoxLayout)
[ QMargins() ]
(layout::begin // 第一个水平布局
(new QHBoxLayout)
(new QLineEdit)
["input txt 1"] // id
[ QSize() ] // 设置大小
(new QPushButton)
["input btn 1"] // id
[ QSize() ]
[ ONSIGNAL( // 设置slot,同时定义slot
&QPushButton::clicked,
[=] (bool) {
// handle slot
})]
(layout::end)) (layout::begin // 第二个水平布局
(new QHBoxLayout)
(new QListWidget)
["list"] // id
[ QSize() ]
(layout::end))
(layout::end,
[=](QLayout*){
// 完成布局后回调
}) ;

基本上可以不调用具体QLayout和QWidget的函数,也免去了记住这些函数。没有声明过一个变量名。

如果希望更加细致的设置可以在 operator[ ] 设置ONLOAD回调:

(new QTableWidget)
["table 1"] // id
[ ONLOAD [=](QTableWidget* table) {
// 设置table }]

Qt虽然有signal-slot机制,支持动态回调绑定,但是对于一些事件(QEvent 如输入设备,窗口管理等事件),你必须继承QWidget,重写对应的事件虚函数。这里提供一个ZQ模板类,将QWidget所有事件虚函数由ZQEmitter代理signal发射,也就是你可以通过slot接收这些事件,而不必去多写一个继承类。尤其是为了弹出菜单就要多写一个继承类。

用slot接收QEvent:

(new ZQ<QFrame>)
["frame 1"] // id
[ ONSIGNAL(
&QFrame::contextMenuEvent,
[=] (QContextMenuEvent*) {
// 弹出菜单
})]

zqt_helper 同样支持 menu布局,如果你没有搞明QMenu和QAction,没有关系,你可以忘记。

menu::begin
(new QMenu)
("level 1 item 1")
[ TRIGGERED [=]() {
// do sth
} ]
("level 1 item 2")
[ TRIGGERED [=]() {
// do sth
} ]
(menu::begin
("level 1 item 3")
("level 2 item 1")
("level 2 item 2")
[ TRIGGERED [=]() {
// do sth
} ]
(menu::end))
(menu::end);

zqt_helper支持QTableWidget

QTableWidget* table = new QTableWidget;
// 设置水平header
column::begin(table)
("header col 1")
[ QFont() ]
[ QColor() ]
("header col 2")
("header col 3")
("header col 4")
(column::end);
// 添加行内容
row::begin(table)
("row1 col1")
("row1 col2")
("row1 col3")
("row1 col4")
(row::another)
("row2 col1")
("row2 col2")
("row2 col3")
("row2 col4")
(row::end);
// 修改单元
cell::begin(table)
(, ) // 定位
[ "change@ row2 col3" ]
(, )
[ "change@ row1 col4" ]
(cell::end);

zqt_helper项目是zwx_helper项目的qt5版本,支持同样的编程方法。

zqt_helper项目地址https://github.com/bbqz007/zhelper-qt5Widgets, 适用于Qt5 Widgets。

zwx_helper项目地址https://github.com/bbqz007/zhelper-wxWidgets , 适用于 wxWidgets。

两个项目同样提供一个gui4smali的demo。

zqt_helper 轻松开发Qt5 Widgets应用的更多相关文章

  1. VS轻松开发Node.js应用

    PTVS开发团队又开发出一款可以在VS里编写Node.js应用程序的插件--NTVS(Node.js Tools for Visual Studio),开发者可以在VS里轻松开发Node.js应用. ...

  2. 開始开发 Dashboard Widgets,第2章,读书笔记

    文件夹:http://blog.csdn.net/wide288/article/details/40298693 主要内容: widgets 的组成是什么. 怎么创建 info.plist 文件 怎 ...

  3. 自动驾驶轻松开发?华为云ModelArts赋能智慧出行

    作为战略新兴产业,人工智能已经开始广泛应用于多个领域.近几年,科技公司.互联网公司等各领域的企业纷纷布局自动驾驶.那么,自动驾驶技术究竟发展得如何了?日前,华为云携手上海交通大学创新中心举办的华为云人 ...

  4. 学会C sharp计算机编程语言 轻松开发财务、统计软件

    就像人们用同一种语言才可以顺畅交流一样,语言是计算机编程的根本,是IT世界交流的工具.运用这些计算机语言,人们可以创造出一个美妙的世界.你点击某个网页或是安装一个应用程序软件,这简简单单动作的背后,就 ...

  5. 不懂技术也可以轻松开发一款APP

    这是个衣食住行都离不开手机的时代,甚至可以说,我们不用考虑其他的东西,只要拿着手机,就可以出门做自己想做的事情. 这就是手机app的强大之处,覆盖面极广,小到聊天交友,大到投资理财.每次都是app为我 ...

  6. 使用TopShelf轻松开发Window服务

    关于TopShelf 描述: Topshelf is a framework for hosting services written using the .NET framework. The cr ...

  7. zwx_helper 只用小括号()和中括号[ ] 轻松开发wxWidgets

    https://github.com/bbqz007/zhelper-wxWidgets https://github.com/bbqz007/zhelper-wxWidgets/tree/maste ...

  8. 配置CLion作为Qt5开发环境

    使用Qt进行程序开发时QtCreator总是不二之选.作为老牌IDE在提供了强大的功能同时也对Qt的支持做了许多优化.如果没有特别的原因你应该使用它. 然而一个顺手的工具将会极大得提升生产效率,而如果 ...

  9. I.MX6 ubuntu-core-14.04 Apache php mysql Qt5

    /*************************************************************************** * I.MX6 ubuntu-core-14. ...

随机推荐

  1. 用两张图告诉你,为什么你的App会卡顿?

    有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的画面的? 对Android的视图架构有整体把握. 学会 ...

  2. FluxInterval实例及解析

    为什么80%的码农都做不了架构师?>>>   序 本文主要研究下FluxInterval的机制 FluxInterval reactor-core-3.1.3.RELEASE-sou ...

  3. CentOS7.x上轻量级TCP转发工具rinetd的安装配置

    一.实验背景 Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上. 如果需要将流量从专用地址转发到不在您当前网络上的机器上 ...

  4. Leetcode---Solutions&Notes

    Leetcode已经成为面试必备技能之一,为了紧随潮流,也模仿大佬们刷刷题. 1.采用"龟系"做法,每道题尽量做到时间复杂度和空间复杂度的较优水平: 2.每道题的Solution先 ...

  5. 疯子的算法总结(九) 图论中的矩阵应用 Part 2 矩阵树 基尔霍夫矩阵定理 生成树计数 Matrix-Tree

    定理: 1.设G为无向图,设矩阵D为图G的度矩阵,设C为图G的邻接矩阵. 2.对于矩阵D,D[i][j]当 i!=j 时,是一条边,对于一条边而言无度可言为0,当i==j时表示一点,代表点i的度. 即 ...

  6. Python(Redis 中 Set/Zset 类型数据和其他操作)

    1.redis 基本操作命令 Set 操作 Set 集合就是不允许重复的列表 无序集合 sadd(name,values) 给 name 对应的集合中添加 1 个或多个元素 import redis ...

  7. python(写入 excel 操作 xlwt 模块)

    一.安装 xlwt 模块 pip install xlwt 二.excel 写入操作 这种方式只能新增或者覆盖文件写入 import xlwt # 创建一个workbook 设置编码 workbook ...

  8. 10)drf 过滤器(条件查询 排序 ) 分页器

    一.群查接口各种筛选组件 数据准备 models.py class Car(models.Model): name = models.CharField(max_length=16, unique=T ...

  9. IIS搭建网站(二)

    win+IIS+ASP+ACCESS第二种搭建方式 安装 控制面板”,依次选“添加/删除程序”, 添加/删除Windows组件 在应用程序服务器前打钩.点击详细信息 将“Internet信息服务(II ...

  10. 似乎是最实用的hashtable知识总结

    哈希表:将对象转换为索引,然后存储在数组中. 定义注意点: 对象:就是面向对象中的对象,可以为任何东西.整数.浮点数.日期.字符串.类. 转换:通过hash函数来完成,hash函数是hash表的核心与 ...