【问题标题】:QScrollArea Child Widget size set according to to Parents size changeQScrollArea Child Widget 大小根据 Parent 大小变化设置
【发布时间】:2020-01-21 09:17:18
【问题描述】:

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

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

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

请帮助我,在此先感谢。

这是我使用的示例代码:

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】:

    您的对话框也缺少布局。这就是 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 被添加到该布局中。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 2014-02-17
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      相关资源
      最近更新 更多