Qt:无法直接为带有子项的小部件添加滚动条



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

1.如何为父QWidget添加滚动条

2.使用 qtcreator 在 qt 小部件中插入滚动条

3.在Q小部件中添加滚动条

4.QScroll区域缺少滚动条

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

我的问题:

我需要滚动条的小部件中有许多子小部件。但是我没有添加任何布局。子小部件的几何形状是可修改的,因此我没有向父小部件添加任何布局。

下面是我的代码:

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 中设置的给定位置进行这些文本编辑。

我所需要的只是如果第二个文本编辑的宽度更大,则带一个滚动条。

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

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

原因

创建微件和布局时设置父项的方式不正确。

溶液

创建正确的父/子层次结构并设置所需大小的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())。您可以考虑根据您的特定需求进行调整。

最新更新