我有一个包含水平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);
}
你可以显示你所得到的,并指出你有错误或不便。 – eyllanesc
我添加了更多文字使其更加清晰。我希望有所帮助。 – user545226
图像会好很多。 – eyllanesc