1 问题描述
在QT项目中,使用如下代码隐藏了QDockWidget的标题栏,然后使用QDockWidget对象的setWidget函数,就提示如下警告:
- 隐藏标题栏代码:
QWidget* titleBar = ui->dockWidget->titleBarWidget();
QWidget* tempWidget = new QWidget();
ui->dockWidget->setTitleBarWidget(tempWidget);
delete titleBar;
- 提示的错误:
QWidget::setMinimumSize: (dockWidget/QDockWidget) Negative sizes (0,-1) are not possible
2 问题分析
由于原本的标题栏存在,所以setWidget添加的窗体在标题栏的下方,当去掉标题栏后,setWidget添加的窗体覆盖了原本属于标题栏的位置,所以提示该警告。
3 解决方案
在tempWidget中添加一个控件,占住原本属于标题栏的位置,添加后的代码如下
QWidget* titleBar = ui->dockWidget->titleBarWidget();
QWidget* tempWidget = new QWidget();
ui->dockWidget->setTitleBarWidget(tempWidget);
delete titleBar;
// 占位,防止出现 setMinimumSize ... Negative sizes (0,-1) are not possible的错误
QGridLayout *gridLayout = new QGridLayout(tempWidget);
QLabel *tempLabel = new QLabel("");
tempLabel->setMaximumHeight(1);
gridLayout->addWidget(tempLabel);
gridLayout->setContentsMargins(0, 0, 0, 0);
4 总结
遇到这类问题不要害怕,根据提示初步定位范围,然后可以使用最笨也是最有效的方法(屏蔽代码调试),定位到具体代码后冷静分析,遇到实在解决不了的问题时,应选择绕过它,相信你一定能解决掉所有BUG的。
如果觉得这篇文章对您有帮助,记得点个赞哟 ^ ^