QT 记录(一)

Qt中命名空间namespace Ui

QtCreator中创建UI项目代码中,通常下面两个头文件中,都会包含两个同名的命名空间

#include "mainwindow.h"

#include "ui_mainwindow.h"

可以参考下面博文介绍,命名空间的重复定义是可以的,并且会自动合并。Qt中命名空间namespace Ui-CSDN博客文章浏览阅读892次,点赞3次,收藏10次。两个类同名,但不是同一个https://blog.csdn.net/qq_42774608/article/details/128159721

Qt界面中折叠/收缩/侧边工具栏/收缩导航的实现方法 

 1)QSplitter控件的方法,QSplitter是布局控件,可以选择水平或者垂直的方式,通过拖动控制handle,实现左右或者上下收缩。详细可查看[QT_043]Qt学习之分裂器(QSplitter)-CSDN博客

QT左侧自定义栏收进_qt侧边栏收缩-CSDN博客  通过控制按钮,点击实现收缩

2)QToolBox控件,原生功能支持控件折叠,但是每次只能展开一个折叠,可能需要进行重写类

参考https://www.cnblogs.com/luoxiang/p/14449127.html

3)QTreeWidget控件,实现多级折叠。QT使用QTreeWidget控件制作多级折叠菜单_qt 折叠面板-CSDN博客

4)通过水平布局控件加控制按钮的方式,实现侧边栏折叠。

Qt实现跟随侧边栏的按钮控制侧边栏的展开与折叠_qt侧边栏收缩-CSDN博客Qt实现可伸缩的侧边工具栏(鼠标悬浮控制伸缩栏)-CSDN博客 ,这篇博文采用鼠标悬浮的方式,取代按钮控制缩放。

5)QToolButton和QToolBar,类似界面上的工具条和工具条上的按钮,实现工具按钮集成。

https://blog.51cto.com/u_14770531/6348179

Qt:创建SideBar_qt sidebar-CSDN博客

6) QGroupBox 通过重写类的方式实现折叠,QT自定义控件——可折叠QGroupBox_自定义qtoolbox-CSDN博客

QSpiltter的应用案例

QSpiltter是一种布局,可以实现拖动控制器的handle,调整子控件的大小。在应用过程中存在两个问题:

1)虽然设置了子控件的最小尺寸,但是拖动handle到最小尺寸后,在拖动一点后,子控件还是能折叠;

2)拖动handle,只有相邻的两个子控件可以改变大小。

 主要用到了splitterMoved的slot槽信号, 返回handle的位置,根据根据自己的逻辑,控制相邻控件的缩放关系。最后校验一下最小尺寸,存在最小尺寸为0时,重新设置最小尺寸。槽函数代码如下。

void mainWidget::on_splitter_splitterMoved(int pos, int index)
{
    int pos_min;
    int pos_max;
    int pos_deta;
    QList<int> sizeobj;
    //QList<int> newsizeobj;
    ui->splitter->getRange(index,&pos_min,&pos_max);
    cout << "index:" << index << "pos: " << pos ;
    cout << " pos_min,pos_max " << pos_min << " " << pos_max << endl;
    sizeobj=ui->splitter->sizes();
    //cout << sizeobj[0] << endl;
    for (int i=0;i<sizeobj.count();i++)
    {
        cout << sizeobj[i] << " ";
    }
    cout << endl;
    pos_deta=pos-current_handle_pos;
    //cout << pos_deta << endl;
    if (index == current_handle_index)
    {
        if (pos_deta > 0)
        {
            for (int i=0;i< ui->splitter->count();i++)
            {
                if (i != current_handle_index)
                {
                    sizeobj[i]=sizeobj[i]-pos_deta;
                }
            }
        } else {
            for (int i=0;i< ui->splitter->count();i++)
            {
                if (i != current_handle_index)
                {
                    sizeobj[i]=sizeobj[i]+pos_deta;
                }
            }
        }

    }
    current_handle_index=index;
    current_handle_pos=pos;
    //检查最小尺寸为0时,强制设置最小尺寸
    for (int i=0;i< ui->splitter->count();i++) {
        if (sizeobj[i]==0) sizeobj[i]=100;
    }

    ui->splitter->setSizes(sizeobj);

    //current_handle_index ==0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值