Qt:Unable 直接将滚动条添加到带有子项的小部件
Qt:Unable to directly add scrollbar to a widget with children
我是 Qt 编程的新手,我想将滚动条添加到一个小部件中,该小部件在 it.I 中看到了几个 questions/posts 这样的子部件:
1.
2.
3.
4.QScrollArea missing Scrollbar
但是大多数答案都为我们添加滚动条的小部件设置了布局。
我的问题:
我需要滚动条的小部件在 it.But 中有许多子小部件我没有添加任何布局 it.The 子小部件的几何形状是可修改的,所以我没有添加任何父小部件的布局。
下面是我的代码:
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 宽度更大,我只需要带一个滚动条。
所以我尝试添加滚动条(注释部分)。但是我只能看到滚动条而看不到文本编辑。
任何suggestion/inputs都会提前真的helpful.Thanks!!
原因
您在创建小部件和布局时设置父项的方式不正确。
解决方案
创建正确的 parent/child 层次结构并设置 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())
。您可以考虑根据您的具体需求进行调整。
我是 Qt 编程的新手,我想将滚动条添加到一个小部件中,该小部件在 it.I 中看到了几个 questions/posts 这样的子部件:
1.
2.
3.
4.QScrollArea missing Scrollbar
但是大多数答案都为我们添加滚动条的小部件设置了布局。
我的问题:
我需要滚动条的小部件在 it.But 中有许多子小部件我没有添加任何布局 it.The 子小部件的几何形状是可修改的,所以我没有添加任何父小部件的布局。
下面是我的代码:
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 宽度更大,我只需要带一个滚动条。
所以我尝试添加滚动条(注释部分)。但是我只能看到滚动条而看不到文本编辑。
任何suggestion/inputs都会提前真的helpful.Thanks!!
原因
您在创建小部件和布局时设置父项的方式不正确。
解决方案
创建正确的 parent/child 层次结构并设置 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())
。您可以考虑根据您的具体需求进行调整。