QDockWidget使用小结

参考博文:
QDockWidget嵌套布局详解-实现Visual Studio布局
开源代码示例:
Qt-Advanced-Docking-System

一.常用问题记录

1.1 拖动问题

QMainWindow界面拖动时,使用ui界面拖动控件需去掉属性栏最下方"Docked"才能移动。
使用布局后不支持鼠标边框拖动,需用代码添加方式,复杂的要用到嵌套。

1.2 所遇异常问题(TopDockWidgetArea方式打开时高度固定占一半)

解决方法:采用LeftDockWidgetArea方式。

1.3 隐藏标题栏

QDockWidget::titleBarWidget默认为空指针,但标题栏默认存在,需新建空QWidget替换实现隐藏。

    QWidget* lTitleBar = this->titleBarWidget();
	QWidget* lEmptyWidget = new QWidget();
	this->setTitleBarWidget(lEmptyWidget);
	delete lTitleBar;	

二.常用代码

2.1 构造函数中QDockWidget嵌套

//原则,先左右,再上下
    addDockWidget(Qt::LeftDockWidgetArea, m_DockWidget_File);//Qt::TopDockWidgetArea,猜测Top格式打开时即占一半
    splitDockWidget(m_DockWidget_File,m_DockWidget_Scan,Qt::Horizontal);
    splitDockWidget(m_DockWidget_File,m_DockWidget_TDI,Qt::Vertical);//Item

	tabifyDockWidget(m_DockWidget_TDI, m_DockWidget_Item);
    tabifyDockWidget(m_DockWidget_Item,m_DockWidget_Frame);

2.2 恢复默认布局

//第一步 全部close
	int nSize = m_vDock.size();
	for (int i = 0; i < nSize; i++)
	{
		QDockWidget* dock = m_vDock.at(i);
		dock->close();//hide()
		//dock->lower();//raise();
	}
   
	//第二步 重新布局
	addDockWidget(Qt::LeftDockWidgetArea, m_DockWidget_File);//Qt::TopDockWidgetArea,猜测Top格式打开时即占一半
	splitDockWidget(m_DockWidget_File, m_DockWidget_Scan, Qt::Horizontal);
	splitDockWidget(m_DockWidget_File, m_vDock.at(0), Qt::Vertical);//Item m_DockWidget_TDI
	tabifyDockWidget(m_vDock.at(0), m_vDock.at(1));
	tabifyDockWidget(m_vDock.at(1), m_vDock.at(2));
	m_DockWidget_File->show();
	m_DockWidget_Scan->show();
	m_vDock.at(0)->show();

2.3 某自定义DockWIdget示例程序

CustomDockWidget::CustomDockWidget(QWidget *parent) : QDockWidget(parent)
{
}

bool CustomDockWidget::event(QEvent *event)
{
    if (QEvent::ZOrderChange == event->type()) {
        if (windowFlags() & Qt::WindowMaximizeButtonHint) {
            return QDockWidget::event(event);
        } else {
            QWidget w;
            setMaximumSize(w.maximumSize());
            setWindowFlags(Qt::Dialog
                           | Qt::WindowCloseButtonHint
                           | Qt::WindowMaximizeButtonHint
                           | Qt::WindowMinimizeButtonHint);
            show();
        }
    }

    return QDockWidget::event(event);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值