QT内容大小超过window大小时不出现滚动条
QT scrollbar does not appear when the size of the content exceeds the window size
我正在使用 qt,我正在动态创建以下图片的对象(每个时间轴都是一个小部件)。
结构是我将此小部件添加到 verticalLayout,即 scrollArea 包含的小部件。
但不幸的是,滚动条没有出现,而应该出现:
如果我增加 window 的大小,内容将正确显示:
但是由于在 window 中创建的时间线数量可能大于屏幕尺寸,所以我需要一个滚动条。可能是什么问题呢?那
编辑:一些源代码,主要的构造函数window:一些代码不存在,因为它是用 QTCreator 创建的
Schedule::Schedule(QString pathname, QWidget *parent) :
QWidget(parent),
ui(new Ui::Schedule)
{
ui->setupUi(this);
ui->scrollArea->setLayout(ui->pageLayout);
traceParser parser(pathname);
parser.readJson();
ArchitectureParameter arch = parser.getArchParam();
QString taskName;
for(std::list<QString>::iterator taskNameIter = parser.getTaskNames().begin();
taskNameIter != parser.getTaskNames().end(); taskNameIter++)
{
taskName = *taskNameIter;
TaskSchedule *t = new TaskSchedule(this , taskName, 80, arch.nCPU(), arch.maxTime(),
parser.getExecList(taskName), parser.getTaskSimpleEventsMap(taskName));
t->resize(600, t->height());
t->resize(600, t->width());
ui->pageLayout->addWidget(t);
}
}
发生这种情况的原因可能是您在 scrollArea 上设置了布局。这是对我有用的快速片段:
QWidget* testWidget = new QWidget;
QVBoxLayout* layout = new QVBoxLayout;
QStringList strings;
strings << "asdfasd" << "asdffdfd" << "asdvvsdf" << "asdfccasdf";
Q_FOREACH(QString string, strings){
TagButton* btn = new TagButton();
btn->setText(string);
layout->addWidget(btn);
}
testWidget->setLayout(layout);
QScrollArea* scrollArea = new QScrollArea;
scrollArea->setWidget(testWidget);
scrollArea->show();
请注意,我在 testWidget 上设置了布局,然后在 scrollArea 上设置了 setWidget
我正在使用 qt,我正在动态创建以下图片的对象(每个时间轴都是一个小部件)。
结构是我将此小部件添加到 verticalLayout,即 scrollArea 包含的小部件。
但不幸的是,滚动条没有出现,而应该出现:
编辑:一些源代码,主要的构造函数window:一些代码不存在,因为它是用 QTCreator 创建的
Schedule::Schedule(QString pathname, QWidget *parent) :
QWidget(parent),
ui(new Ui::Schedule)
{
ui->setupUi(this);
ui->scrollArea->setLayout(ui->pageLayout);
traceParser parser(pathname);
parser.readJson();
ArchitectureParameter arch = parser.getArchParam();
QString taskName;
for(std::list<QString>::iterator taskNameIter = parser.getTaskNames().begin();
taskNameIter != parser.getTaskNames().end(); taskNameIter++)
{
taskName = *taskNameIter;
TaskSchedule *t = new TaskSchedule(this , taskName, 80, arch.nCPU(), arch.maxTime(),
parser.getExecList(taskName), parser.getTaskSimpleEventsMap(taskName));
t->resize(600, t->height());
t->resize(600, t->width());
ui->pageLayout->addWidget(t);
}
}
发生这种情况的原因可能是您在 scrollArea 上设置了布局。这是对我有用的快速片段:
QWidget* testWidget = new QWidget;
QVBoxLayout* layout = new QVBoxLayout;
QStringList strings;
strings << "asdfasd" << "asdffdfd" << "asdvvsdf" << "asdfccasdf";
Q_FOREACH(QString string, strings){
TagButton* btn = new TagButton();
btn->setText(string);
layout->addWidget(btn);
}
testWidget->setLayout(layout);
QScrollArea* scrollArea = new QScrollArea;
scrollArea->setWidget(testWidget);
scrollArea->show();
请注意,我在 testWidget 上设置了布局,然后在 scrollArea 上设置了 setWidget