zoukankan      html  css  js  c++  java
  • zqt_helper 轻松开发Qt5 Widgets应用

    目标:

    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)
        (1, 2)    // 定位
            [ "change@ row2 col3" ]
        (0, 3)
            [ "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。

  • 相关阅读:
    eclipse中配置jbpm3.2插件
    传统分页功能的实现
    struts的status属性
    OA项目中的论坛模块设计与实现
    高并发
    Python下编写Windows自动化测试软件
    Windows GUI自动化测试技术的比较和展望
    Windows Automation API和自动化测试
    MSAA简介
    QQ截图时窗口自动识别的原理(WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx,RealChildWindowFromPoin
  • 原文地址:https://www.cnblogs.com/bbqzsl/p/12943804.html
Copyright © 2011-2022 走看看