【问题标题】:Add widgets to a ScrollArea将小部件添加到 ScrollArea
【发布时间】:2013-05-23 15:03:47
【问题描述】:

我正在为下载列表创建一个窗口 dimanica。 但是滚动条不起作用,“widgets children”被“cut”了。

我哪里错了?谢谢。

来源:

    QWidget *central = new QWidget;
    QScrollArea *scroll = new QScrollArea;
    QVBoxLayout *layout = new QVBoxLayout(scroll);
    scroll->setWidget(central);
    scroll->setWidgetResizable(true);

    int i=0;
    while(i<10){
        QWidget *p1 = new QWidget;
        QHBoxLayout *hl = new QHBoxLayout(p1);
        QLabel *label1 = new QLabel("test");
        QLabel *label2 = new QLabel("0%");
        hl->addWidget(label1);
        hl->addWidget(label2);
        layout->addWidget(p1);
        i++;
    }

    QMainWindow *w = new QMainWindow;
    w->setGeometry(50,50,480,320);
    w->setCentralWidget(scroll);
    w->show();

【问题讨论】:

  • 您似乎正在尝试列出清单。也许看看QListWidgetQListViewQAbstractListModel 二人组?

标签: qt layout qwidget qscrollarea


【解决方案1】:

发现你的错误,你应该将layout设置为小部件central而不是scroll

QWidget *central = new QWidget;
QScrollArea *scroll = new QScrollArea;
QVBoxLayout *layout = new QVBoxLayout(central);
scroll->setWidget(central);
scroll->setWidgetResizable(true);

已编辑:

您的标签已经占用了所有可用空间,如果您注意到的话,label1 从左边界开始到中间结束,label2 从右边界开始并结束。如果我理解正确,您希望 label1 占用所有可用空间,而 label2 仅占用所需空间,仅此而已?

阅读QSizePolicy 类并在标签上使用setSizePolicy()。尝试在 label2 声明之后插入这一行:

QLabel *label2 = new QLabel("0%");
label2->setSizePolicy(QSizePolicy::QSizePolicy::Maximum,QSizePolicy::Maximum);

并在QMainWindow *w = new QMainWindow;之前添加行layout-&gt;addStretch();

【讨论】:

  • 不错,但是只有横向拉伸吗?
  • 您想保留几何图形 (50,50,480,320) 并拉伸标签占用所有水平空间?
  • 是的,我希望每个项目(小部件子项)水平占据所有空间(仅限水平)。你可以帮帮我吗?感谢您的关注。无需固定高度或宽度。窗口可以调整大小。
  • 我不明白,你想达到什么,在我的测试应用程序中,一切正常。你为什么不发布你目前的情况截图,以及你想如何改变它
  • 也许如果你用while(i&lt;3) 替换while(i&lt;10) 你会看到问题。截图:i.stack.imgur.com/CRVhq.png
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 2017-07-11
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2014-08-16
相关资源
最近更新 更多