Qt - QScrollArea 小部件剪辑内容

Posted

技术标签:

【中文标题】Qt - QScrollArea 小部件剪辑内容【英文标题】:Qt - QScrollArea widget clipping contents 【发布时间】:2011-01-15 17:42:27 【问题描述】:

我正在尝试向我修改的拖放示例源添加滚动。该示例简单地绘制了几个可拖动的 QLabel 小部件。我正在修改它,以便创建大量不同长度的小部件。

我创建了一个由 main 调用并包含滚动小部件的类,该小部件又包含绘制 QLabels 的原始小部件。这个类的唯一方法是构造函数,下面是它的实现:

layoutWidget::layoutWidget(QWidget *parent) : QWidget(parent)
    QScrollArea *scroll = new QScrollArea();
    QVBoxLayout *layout = new QVBoxLayout();

    //widget that draws the draggable labels
    Widget *w = new Widget();

    scroll->setWidget(w);
    scroll->setBackgroundRole(QPalette::Light);

    layout->addWidget(scroll);    

    setLayout(layout);

我在 Widget 构造函数中使用了 setMinimumSize()。当我运行程序时,只绘制由 setMinimumSize() 定义的区域内的内容,其余部分被剪掉。我错过了什么吗?

【问题讨论】:

【参考方案1】:

您的小部件很可能需要将自身调整为完整大小以显示其内容。可能发生的情况是您设置的最小尺寸是它获得的唯一尺寸,所以它使用它。我建议向小部件添加一个布局,使其根据其子级动态调整大小,但我认为这不适用于可拖动的内容。

【讨论】:

【参考方案2】:

滚动区域内的小部件的最小尺寸小于其内容,因此仅绘制该区域内的内容。我对 setMinimumSize() 使用了较大的值,问题就解决了。

【讨论】:

以上是关于Qt - QScrollArea 小部件剪辑内容的主要内容,如果未能解决你的问题,请参考以下文章

QScrollArea 中的自定义小部件仅在滚动时严重重绘

将小部件放在 QScrollArea 的中心

剪辑小部件的paintEvent

Qt 自定义小部件如何通知 ScrollArea 父级视图更改

Qt - 如何控制 QLayout 中的小部件大小

无法动态地将小部件添加到 QScrollArea 对象