概述
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;}");
最后
以上就是坚定苗条为你收集整理的记录QDockWidget实现竖版排列的全部内容,希望文章能够帮你解决记录QDockWidget实现竖版排列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复