这个问题可能非常具体,以至于我不会期待太多的帮助..但我仍然会试试运气。我一直在与这个问题作斗争很长时间,对它疯狂,在尝试了许多不同的sizepolicies组合并调整事件操作后没有真正的解决方案。到目前为止,这是我最好的解决方案,但远非理想。
我有一个带有三个小部件的主窗口(中央是QWidget,顶部和底部是QDockWidget):
首先是中央部件:
QSizePolicy sizepolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);
central->setSizePolicy(sizepolicy);
MainWindow::setCentralWidget(central);
然后是一个底部小部件:
QWidget* btitle = new QWidget(this);
bottom->setTitleBarWidget(btitle);
bottom->setMinimumHeight(65);
bottom->setAllowedAreas(Qt::BottomDockWidgetArea);
this->addDockWidget(Qt::BottomDockWidgetArea, bottom);
和一个顶级小部件:
QWidget* ttitle = new QWidget(this);
top->setTitleBarWidget(ttitle);
top->setMinimumHeight(30);
top->setMaximumHeight(30);
top->setAllowedAreas(Qt::TopDockWidgetArea);
this->addDockWidget(Qt::TopDockWidgetArea, top);
它们都正确对齐,没有不需要的边框/关闭按钮/等,并在调整应用程序窗口大小时正确更改大小。但是在顶部小部件下面有一个鼠标光标热点,用于调整中央小部件的大小(就像在mac sizehandle上这样)。 软件用户可以轻松地在操作顶部窗口小部件时抓住它,并开始调整中央窗口小部件的大小。我已经编写了一个自动位置/大小修复程序,可以很好地修复小部件大小/位置恢复正常但小部件大小抓握/句柄/ cursorspot现在是它被释放的位置并保持在那里直到再次抓住并调整大小。底部小部件完全相同,但顶部小部件的位置和大小非常固定。看起来这些句柄似乎只能从小部件的顶部边框起作用。
这是我在mainwindow中实现的位置/大小修复:
this->bottom->setGeometry(0, this->central->height()+30, this->width(), bottomsize);
this->central->setGeometry(0, 31, this->width(), this->height() - (30+bottomsize));
如代码所示,底部窗口小部件具有动态高度(底部),中央窗口小部件根据它调整其大小,但顶部窗口小部件的大小始终相同。
此外,当拉动窗口小部件顶部边框的调整大小手柄时,窗口小部件大小会在上面的行和前一个鼠标拖动位置校正的位置之间跳转;在鼠标移动事件中,它是拖动位置,否则是校正位置。此外,当手柄被拖动并释放到小部件顶部位置以外的其他位置时,调整应用程序窗口的大小会使小部件位置和大小的位置/大小跳跃相同...
所以如何完全删除调整大小的句柄/句柄,如果这是不可能的,为什么句柄不会根据小部件SetGeometry()改变它的位置将其他所有内容都设置在正确的位置,但是把手位置保持在以前释放的位置。
感谢您阅读这篇文章,我希望您能为此提供一些帮助。 我使用的是OS X 10.11.3(El Capitan)和Qt 5.5。