[QScrollArea子窗口小部件的尺寸根据父母的尺寸变化设置

问题描述 投票:0回答:1

我想让(子)小部件适合父小部件尺寸。因此,如果父窗口太小而无法显示子窗口小部件的所有元素,则QScrollArea应该出现,否则它应该是不可见的。

我附上了图片,以便更好地理解。

enter image description here

黑框是我希望滚动条出现的位置。因为当我们减小窗口的大小时,有时您看不到滚动条(如下图所示),对于大型项目而言,滚动条看起来不够优雅。

enter image description here

请先帮助我,谢谢。

这是示例代码,例如:

int main(int argc, char *argv[]){
QApplication a(argc, argv);
QScrollPractice w;

QDialog * dlg = new QDialog(); 
//dlg->setGeometry(100, 100, 260, 260);
dlg->setMinimumSize(150, 200);

QScrollArea *scrollArea = new QScrollArea(dlg);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea->setWidgetResizable(true);
//scrollArea->setGeometry(10, 10, 200, 200);
//scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);
//QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
scrollArea->setSizePolicy(sizePolicy);

QWidget *widget = new QWidget(scrollArea);
scrollArea->setWidget(widget);

QVBoxLayout *layout = new QVBoxLayout(widget);
widget->setLayout(layout);

for (int i = 0; i < 10; i++)
{
    QPushButton *button = new QPushButton(QString("%1").arg(i));
    layout->addWidget(button);
    }

dlg->show();

return a.exec();

}

qt visual-c++ qwidget qscrollarea
1个回答
0
投票

您的对话框也缺少布局。这就是scrollArea窗口小部件未分布在整个对话框中的原因。

#include <QApplication>
#include <QDialog>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QPushButton>

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

    QDialog * dlg = new QDialog();

    dlg->setMinimumSize(150, 200);

    QScrollArea *scrollArea = new QScrollArea(dlg);
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    scrollArea->setWidgetResizable(true);


    QWidget *widget = new QWidget(scrollArea);
    scrollArea->setWidget(widget);

    QVBoxLayout* dlgLayout = new QVBoxLayout();
    dlg->setLayout( dlgLayout );
    dlgLayout->addWidget( scrollArea );
    QVBoxLayout *layout = new QVBoxLayout(widget);
    widget->setLayout(layout);

    for (int i = 0; i < 10; i++)
    {
        QPushButton *button = new QPushButton(QString("%1").arg(i));
        layout->addWidget(button);
    }

    dlg->show();

    return a.exec();
}

我修改了您的代码以使其可运行和可编译,我还添加了QVBoxLayout并将其添加到对话框中。然后scrollArea被添加到该布局。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.