2016-06-10 49 views
1

我正在編寫一個小應用程序,允許用戶自由定義圖表。目前的解決方案使用QDockWidget,以便用戶可以根據自己的喜好調整大小和重新排列這些地塊。添加新的DockWidget後自動調整DockWidgets的高度

我對此解決方案非常滿意,但仍有一個缺點。如果用戶將新的QDockWidget添加到已定義的那個,那麼一個好的行爲是將所有QDockWidget調整爲具有相同的高度。

以下代碼說明了我試圖實現的內容。

#include <QtGui> 
#include <QMainWindow> 
#include <QDockWidget> 
#include <QLabel> 
#include <QApplication> 
#include <QAction> 
#include <QMenuBar> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    auto window = new QMainWindow; 
    auto label = new QLabel("Central Widget"); 
    label->hide(); 
    window->setCentralWidget(label); 
    window->setDockNestingEnabled(true); 
    for (int i = 1; i < 3; i++) { 
     auto dock = new QDockWidget(QString("Plot %1").arg(i)); 
     dock->setWidget(new QLabel(QString("Plot %1").arg(i))); 
     window->addDockWidget(Qt::LeftDockWidgetArea, dock); 
    } 
    window->setFixedSize(QSize(300, 600)); 
    window->show(); 

    // User presses a button and the following would get executed! 
    auto dock = new QDockWidget(QString("New Plot")); 
    dock->setWidget(new QLabel(QString("New Plot"))); 
    window->addDockWidget(Qt::LeftDockWidgetArea, dock); 
    return app.exec(); 
} 

不幸的是,新添加的圖有一個非常小的尺寸,而其他兩個仍然很大。

Behavior of code

期望的行爲應該是這樣的,我手動調整被告席部件之後。 Desired behavior

如何以最少量的額外工作實現這種行爲?我真的不得不手動調整我所有的QDockWidgets嗎?

回答

0

發生這種情況是因爲您尚未將最小尺寸定義爲QDockWidgets。所以,如果你想讓你的第三個碼頭小部件的大小相同。它的最小高度設置爲這樣的1 /總窗口大小的3:

dock->setMinimumHeight(window->height()/3); //! This is the third dock widget 
+0

如果他有超過3'QDockWidget's? – IAmInPLS

+0

@IAmInPLS我的意思是說,弗蘭克最初添加了兩個DockWidgets,並調用'window-> show()'這樣'window''根據可用的大小調整可用的'dockwidgets'的大小。所以當添加第三個'dockwidget'並且dockwidget沒有任何最小尺寸時,它不會調整其他dockwidgets的大小,這就是爲什麼完整的窗口區域不能在它們之間共享。三隻是一個例子,可以有'n dockwidgets'。 –

+0

所以,你可能會提供更通用的答案.. – IAmInPLS

1

我通過使用使用Qt 5.6傳來了新的功能,確實在我的對接系統,同樣的事情(預期的正好這個用例):

void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, 
           const QList<int> &sizes, 
           Qt::Orientation orientation) 

http://doc.qt.io/qt-5/qmainwindow.html#resizeDocks

+0

嗨!感謝提示。其實,我已經找到了這個功能。見上面的評論。但不幸的是,我不得不依靠Qt 5.5。 – Aleph0