当前位置: 代码迷 >> 综合 >> QMainWidget::resizeDocks: one QDockWidget is not part of the layout
  详细解决方案

QMainWidget::resizeDocks: one QDockWidget is not part of the layout

热度:60   发布时间:2023-12-02 21:35:57.0

原因:有控件未布局

解决办法:调用 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

  相关解决方案