gpt4 book ai didi

c++ - Qt:无法直接将滚动条添加到有 child 的小部件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:50 32 4
gpt4 key购买 nike

我是 Qt 编程的新手,我想向其中包含子小部件的小部件添加滚动条。我已经看到几个关于此的问题/帖子,例如:

1. How to add a scrollbar to parent QWidget

2。 Insert a scrollbar in a qt widget using qtcreator

3。 Adding scroll bar to a Qwidget

4. QScrollArea missing Scrollbar

但大多数答案都为我们添加滚动条的小部件设置了布局。

我的问题:

我需要滚动条的小部件里面有很多子小部件。但是我没有向它添加任何布局。子小部件的几何形状是可以修改的,所以我没有向父小部件添加任何布局。

下面是我的代码:

class Absolute : public QWidget {

public:
Absolute(QWidget *parent = 0);
};

Absolute::Absolute(QWidget *parent)
: QWidget(parent) {

QTextEdit *ledit = new QTextEdit(this);
ledit->setGeometry(5, 5, 500, 550);

QTextEdit *lledit = new QTextEdit(this);
lledit->setGeometry(510, 5, 250, 550);

/*QScrollArea* sa = new QScrollArea();
sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
auto *widget = new QWidget(this);
sa->setWidget(widget);

auto *l = new QVBoxLayout(this);
l->setMargin(0);
l->addWidget(sa);*/
}

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

QApplication app(argc, argv);

Absolute window;
window.setWindowTitle("Absolute");
window.setGeometry(500,500,1500,1000);
window.show();

return app.exec();
}

但是,如果没有滚动条代码(注释部分),UI 会在 setGeometry 中设置的给定位置显示这些文本编辑。

如果第二个 textedits 宽度更大,我只需要带一个滚动条。

所以我尝试添加滚动条(注释部分)。但是我只能看到滚动条而看不到文本编辑。

任何建议/意见都会非常有帮助。提前致谢!!

最佳答案

原因

您在创建小部件和布局时设置父项的方式不正确。

解决方案

创建正确的父/子层次结构并设置所需的QScrollArea 小部件大小。无需为此小部件设置布局。

例子

这是我为您准备的示例,用于演示如何修复 Absolute:

class Absolute : public QWidget {
public:
Absolute::Absolute(QWidget *parent = nullptr)
: QWidget(parent)
{
auto *sa = new QScrollArea(this);
auto *l = new QVBoxLayout(this);
auto *widget = new QWidget();
auto *ledit = new QTextEdit(widget);
auto *lledit = new QTextEdit(widget);

sa->setWidgetResizable(true);
sa->setWidget(widget);
sa->setAlignment(Qt::AlignLeft | Qt::AlignTop);

ledit->setGeometry(5, 5, 500, 550);
lledit->setGeometry(510, 5, 250, 550);

widget->setFixedSize(lledit->geometry().right(), lledit->geometry().bottom());

l->setMargin(0);
l->addWidget(sa);
}
};

注意:出于演示目的,widget 的大小设置为 (lledit->geometry().right(), lledit->geometry() .bottom())。您可以考虑根据您的具体需求进行调整。

关于c++ - Qt:无法直接将滚动条添加到有 child 的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52403547/

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