2017-05-24 279 views
0

我有一個包含水平QSplitter的Qt(5.8 C++)窗口。最初我只包含2個小部件(而不是QScrollArea's),我的主窗口將初始化爲每個內部小部件的最小大小(大約500x600),除非我長大窗口,否則分離器不會真正滑動到任何位置,因爲組件已經處於最小尺寸。但它看起來不錯。但是,由於我知道頂部小部件在典型使用中有時會變得非常大,所以我把它放在QScrollArea中,然後將THAT放入QSplitter的上半部分。我期望它像之前一樣初始化爲大約500x600(沒有滾動條),並且滾動條僅在縮小窗口(或之後增加內部小部件)時出現。但似乎發生的事情是,QScrollArea想要在它所包含的組件周圍繪製一個簡潔的邊框。這會將幾個像素添加到顯示我的整個窗口小部件所需的最小大小,從而使其始終開始繪製滾動條。如果我用鼠標將窗口的高度增加幾個像素,滾動條就會消失。所以每次運行我的應用程序時,我的第一步就是將窗口的高度增加幾個像素,以使煩人的滾動條消失。也許QScrollBar不會將邊框的像素添加到最小尺寸的高度? (我嘗試添加幾個像素到最小尺寸,它似乎沒有效果)。在QSplitter中使用QScrollArea時的初始窗口大小略微過小使滾動條出現

有沒有辦法讓我的窗口初始化爲沒有滾動條,如果窗口小部件的大小足夠小,窗口小於全屏?我只想讓滾動條在必要時出現。

希望下面的示例代碼有助於解釋我做了什麼讓這裏:

MainWindow::MainWindow(QWidget *parent) : 
     QMainWindow(parent), 
     ui(new Ui::MainWindow) { 

    auto centralSplitter = new QSplitter(Qt::Vertical); 
    setCentralWidget(centralSplitter); 

    auto button1 = new QPushButton("Top\nButton\n(Add more lines of text than this to make button taller)"); 

    //This looks fine, but has no scroll bar 
    //centralSplitter->addWidget(button1); 

    // This creates a scroll bar even if it shouldn't be necessary 
    auto scrollArea1 = new QScrollArea; 
    scrollArea1->setWidget(button1); 
    centralSplitter->addWidget(scrollArea1); 


    auto button2 = new QPushButton("Bottom\nButton\n(I also added more text here too)"); 
    centralSplitter->addWidget(button2); 
} 
+0

你可以顯示你所得到的,並指出你有錯誤或不便。 – eyllanesc

+0

我添加了更多文字使其更加清晰。我希望有所幫助。 – user545226

+0

圖像會好很多。 – eyllanesc

回答

0

於是我想出了一個解決方案。這看起來並不理想,但我創建了自己的QScrollArea的子類,並且重載了sizeHint()以將寬度和高度都增加到6像素。 (我通過反覆試驗抵達了6)。

class MyScrollArea: public QScrollArea { 
public: 
    virtual QSize sizeHint() const; 
}; 

QSize MyScrollArea::sizeHint() const { 
    auto widgetSize = widget()->sizeHint(); 
    return QSize(widgetSize.width()+6,widgetSize.height()+6); 
} 

現在窗口初始化時沒有任何滾動條,就像我期待的那樣。

相關問題