gpt4 book ai didi

c++ - QScrollArea 缺少滚动条

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:39 25 4
gpt4 key购买 nike

我认为这是同一个问题:QScrollArea resizing QWidget

但是没有解决办法。所以让我揭露这个问题。

  • 测试2继承自QWidget:
    • 作曲:
      • QSpinBox 的 vector
      • QScrollArea
      • QVBoxLayout
    • test2 (QWidget) <- QScrollArea <- QVBoxLayout <- Spinbox
  • 问题:
    • 没有滚动条
    • [已修复] 滚动条的内部缩小以适应如此小的空间,无法读取任何内容(窗口可以在执行期间调整大小,这将导致内部变大并且可读,但不会出现滚动条)

我认为问题来自单一来源::大小提示和布局 (http://qt-project.org/doc/qt-5.1/qtwidgets/qscrollarea.html#details)

第二个问题(缩小的widget)可以通过设置“c->setSizeConstraint(QLayout::SetMinimumSize);”来解决

我目前正在寻找缺少滚动条的解决方案

这是显示我的问题的代码:

<c++>
#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QSpinBox>

class test2 : public QWidget
{
Q_OBJECT
public:
test2(QWidget *parent = 0) :QWidget(parent)
{
b = new QScrollArea(this);
c = new QVBoxLayout;

for (int i = 0; i < 10; i++)
{
a.push_back(new QSpinBox());
c->addWidget(a[i]);
}

c->setSizeConstraint(QLayout::SetMinimumSize);
b->setLayout(c);
b->resize(200, 200);
}

~test2()
{
for (int i = 0; i < 10; i++)
delete a[i];
}

protected:

QVector<QSpinBox*> a;
QScrollArea* b;
QVBoxLayout* c;

};


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

test2 a;

a.show();

return app.exec();//*/
}

编辑::在这里找到了一个解决方案: http://qt-project.org/forums/viewthread/295

如果你不想在这里阅读大量无用的代码他做了什么::他扭曲了小部件内的布局

解决方案::从ScrollBar <- Widget <- Layout继承对象

代替小部件 <- ScrollBar <- Layout

但这不是真正的解决方案...我将尝试我给出的示例。

它有效。有没有人有更好的解决方案??

最佳答案

您不想在滚动区域本身上设置布局。您引用的答案源于对此的误解。

  1. 您需要在滚动区域内有一个小部件,然后使用 QScrollArea::setWidget 将该小部件传递到该区域。如果滚动区域内只有一个没有子项的小部件,那么您不需要额外的布局。

  2. 您无需手动跟踪布局所拥有的小部件。一旦删除具有布局的小部件,它们将自动删除。

  3. QScrollArea 小部件未布置在其封闭小部件内。

下面是一个如何操作的工作示例:

// https://github.com/KubaO/stackoverflown/tree/master/questions/scroll-18703286
#include <QScrollArea>
#include <QVBoxLayout>
#include <QSpinBox>
#include <QApplication>

class Window : public QWidget
{
QVBoxLayout m_layout{this};
QScrollArea m_area;
QWidget m_contents;
QVBoxLayout m_contentsLayout{&m_contents};
QSpinBox m_spinBoxes[10];
public:
Window(QWidget *parent = {}) : QWidget(parent) {
m_layout.addWidget(&m_area);
m_area.setWidget(&m_contents);
for (auto & spinbox : m_spinBoxes)
m_contentsLayout.addWidget(&spinbox);
m_contentsLayout.setSizeConstraint(QLayout::SetMinimumSize);
}
};

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window w;
w.show();
return app.exec();
}

关于c++ - QScrollArea 缺少滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com