原因:有控件未布局
解决办法:调用 addDockWidget 布局控件即可
以下是QT错误源码
void QDockAreaLayout::resizeDocks(const QList<QDockWidget *> &docks,const QList<int> &sizes, Qt::Orientation o)
{if (Q_UNLIKELY(docks.count() != sizes.count())) {qWarning("QMainWidget::resizeDocks: size of the lists are not the same");return;}int count = docks.count();fallbackToSizeHints = false;for (int i = 0; i < count; ++i) {QList<int> path = indexOf(docks[i]);if (Q_UNLIKELY(path.isEmpty())) {qWarning("QMainWidget::resizeDocks: one QDockWidget is not part of the layout");continue;}int size = sizes[i];if (Q_UNLIKELY(size <= 0)) {qWarning("QMainWidget::resizeDocks: all sizes need to be larger than 0");size = 1;}while (path.size() > 1) {QDockAreaLayoutInfo *info = this->info(path);
#if QT_CONFIG(tabbar)if (!info->tabbed && info->o == o) {info->item_list[path.constLast()].size = size;int totalSize = 0;for (const QDockAreaLayoutItem &item : qAsConst(info->item_list)) {if (!item.skip()) {if (totalSize != 0)totalSize += sep;totalSize += item.size == -1 ? pick(o, item.sizeHint()) : item.size;}}size = totalSize;}
#endif // QT_CONFIG(tabbar)path.removeLast();}const int dockNum = path.constFirst();Q_ASSERT(dockNum < QInternal::DockCount);QRect &r = this->docks[dockNum].rect;QSize s = r.size();rpick(o, s) = size;r.setSize(s);}
}
更详细的源码信息 qdockarealayout.cpp source code [qtbase/src/widgets/widgets/qdockarealayout.cpp] - Woboq Code Browser