搞界面调整,用到了动态分隔控件,但这个控件却没有填充到父类的全部范围。(如下图,程序为全屏)
窗口布局如下
GroupBox
┗━ 纵向结构
┗━ 横向结构
┗━ pushbutton * n
┗━ Splitter
┗━ ListView
┗━ GraphicsView
void ListTopology::setSize(const QSize & size)
{
m_ctrSplitter->resize(size); ///新加入解决问题的代码
m_ctrWellList->resize(QSize(size.width()*(1.0 / 7), size.height()));
m_ctrTopology->resize(QSize(size.width()*(6.0 / 7), size.height()));
#ifdef _DEBUG
QSize NewSize = m_ctrWellList->size();
WGDebug("topology size width:" << NewSize.width() << ", height:" << NewSize.height());
NewSize = m_ctrTopology->size();
WGDebug("topology size width:" << NewSize.width() << ", height:" << NewSize.height());
#endif
}
之前没有加入解决问题的代码在设置控件大小的时候忘记设置分割器控件的大小导致无法完全填充父控件的全部尺寸。
以下为该widget初始化代码。
ListTopology::ListTopology(QWidget *parent/* = Q_NULLPTR*/) : QWidget(parent) { m_ctrSplitter = new QSplitter(Qt::Horizontal, this); m_ctrWellList = new WGTreeView(m_ctrSplitter); m_ctrTopology = new QGraphicsView(m_ctrSplitter); // 将比例设置为 1:7 m_ctrSplitter->setStretchFactor(0, 1); m_ctrSplitter->setStretchFactor(1, 7); }
以下为调用窗口时的替换组件代码:
void MainWindow::CreateWell() { QSize size = m_ctrTabWidget->size(); m_ctrLayoutMain->replaceWidget(m_ctrTabWidget, m_TopologyView); m_TopologyView->resize(m_ctrTabWidget->size()); m_TopologyView->setSize(size); }
问题思考:
在QT的整个体系中具有resize的函数,并且在创建时也已经确立了父子的从属关系,为什么在调整大小的时候仍然需要自己设置,还是由于我自己的代码失误导致了这种关系链的断裂,留待以后深入研究
----------------------------------2018.4.12 底线在这里 ----------------------------------------------------------------------------