记录QDockWidget实现竖版排列

QDockWidget用法很简单,设置几个参数就可以实现基本功能。我这里是用在QScrollArea里。

由于QDockWidget只应用于QMainWindow里,所以:

QMainWindow *mw = new QMainWindow();
d.ui.verticalLayout->addWidget(mw );//d.ui.verticalLayout是QScrollArea里的frame的布局。

 enum DockOption {
        AnimatedDocks = 0x01,
        AllowNestedDocks = 0x02,
        AllowTabbedDocks = 0x04,
        ForceTabbedDocks = 0x08,  // implies AllowTabbedDocks, !AllowNestedDocks
        VerticalTabs = 0x10,      // implies AllowTabbedDocks
        GroupedDragging = 0x20    // implies AllowTabbedDocks
    };

mw ->setDockOptions(QMainWindow::DockOption::AnimatedDocks);//dock配置
mw ->setStyleSheet("QMainWindow::separator{height:10;}");//间距 = 布局里的spacing

/*然后可以加入QDockWidget */

QDockWidget *dw1 = new QDockWidget(this);
                dw1->setContentsMargins(0, 0, 0, 0);
                dw1->installEventFilter(this);
                dw1->setTitleBarWidget(d.runframeList.back()->getTopBar());//用自己的titleBar
                dw1->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);//设置可移动、可关闭、可悬浮
                dw1->setAllowedAreas(Qt::RightDockWidgetArea);//可以放置的位置,这里选右边,就是只能放在mainwindow的右侧。这样就可以只允许上下拖拽移动位置
                dw1->setWidget(d.runframeList.back().get());//设置内容widget。
                d.mw->addDockWidget(Qt::RightDockWidgetArea, dw1);//放置的位置 右边
                connect(dw1, &QDockWidget::dockLocationChanged, [this](Qt::DockWidgetArea area)
                {//这个信号是dock的状态发生改变会进,如放到左侧,放到右侧了。
                    if (area != Qt::NoDockWidgetArea)/*因为这里全部的dockwidget都放在右侧,所以拖拽过程中,他的状态只会在 Right 和No之间切换*/
                    {
                       //摘出时悬浮状态就是NoDockWidgetArea,所以这里可以响应每次放下的操作。
                    }

                });

//border样式设置, 这里研究好久。最后用的是拼接的方法。

//先设置titlebar的 左 上 右 border 下boder设为none

dockWidget->setStyleSheet("QDockWidget>QWidget{border-left:1px solid #63666E;\
        border-top:1px solid #63666E;border-right:1px solid #63666E;border-bottom:none;}");

//再设置 dockwidget内绑定的widget的 左 下 右 border  上boder设为none
        setStyleSheet("QFrame#RunView{border-left:1px solid #63666E;\
        border-bottom:1px solid #63666E;border-right:1px solid #63666E;border-top:none;}");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值