使用 qtcreator 在 qt 小部件中插入滚动条
Insert a scrollbar in a qt widget using qtcreator
我已经创建了自己的小部件,我将通过代码将其放入另一个小部件中。表单小部件是使用 qtCreator 创建的。我已经将 "subwidgets" 排列成一个 verticalLayout,以便将一个放在另一个下面,但是由于插入的小部件的数量不固定,我需要一个滚动条。
所以我将我的 verticalLayout 放到了 scrollArea 中,但是滚动条从未出现,为什么?结构 "father->child" 如下:
formWidget->scrollArea->verticalLayout
谢谢
编辑:问题如下:我正在从 QPushButton 的单击插槽创建小部件:
在那个小部件的构造函数中,我创建了一个 QScrollArea 和一个 VerticalLayout。
在布局中插入我想要的所有小部件后,我将布局添加到 scrollArea。
这是错误的事情:为了使从按钮创建的小部件中的 scrollArea 可见,有必要将该小部件直接从单击的插槽代码插入滚动条。
有关更多详细信息,我附上单击插槽的代码和小部件构造函数
按钮槽(点击)
scrollArea= new QScrollArea;
scheduleWindow = new Schedule(traceFilePath);
scrollArea->setWidget(scheduleWindow);
scrollArea->resize(scheduleWindow->getWidth(), scheduleWindow->getHeight());
QRect rec = QApplication::desktop()->screenGeometry();
unsigned int desktopHeight = rec.height();
unsigned int desktopWidth = rec.width();
if(scheduleWindow->getWidth() > desktopWidth ||
scheduleWindow->getHeight() > desktopHeight)
scrollArea->showMaximized();
else
scrollArea->show();
小部件构造函数
Schedule::Schedule(QString pathname, QWidget *parent) :
QWidget(parent),
ui(new Ui::Schedule)
{
ui->setupUi(this);
traceParser parser(pathname);
parser.readJson();
ArchitectureParameter arch = parser.getArchParam();
QString taskName;
unsigned int nTasks = 0;
TaskSchedule *t;
for(std::list<QString>::iterator taskNameIter = parser.getTaskNames().begin();
taskNameIter != parser.getTaskNames().end(); taskNameIter++)
{
taskName = *taskNameIter;
nTasks++;
cout<<taskName.toStdString()<<endl;
t = new TaskSchedule(this , taskName, 80, arch.nCPU(), arch.maxTime(),
parser.getExecList(taskName), parser.getTaskSimpleEventsMap(taskName));
ui->pageLayout->addWidget(t);
}
cout<<nTasks<<endl;
width = 2*t->getLineXPosStart() + t->getTickLength()*arch.maxTime();
height = nTasks*(2*TASKSCH_Y_OFFSET + arch.nCPU()*t->getCpuHeight());
ui->area->resize(width, height);
ui->area->setMinimumSize(width, height);
this->adjustSize();
}
垂直布局中的项目是否超过 height/width 限制,因此需要滚动条?据我所知,滚动条只会在超出这些尺寸后显示(不过您应该能够更改此行为)。
你必须像你说的那样放置一个scrollArea。
然后将您想要 "scrollable" 的所有项目拖到该区域内。
一旦它们位于 scrollArea 内,您应该 select 它并设置垂直或水平布局。
然后,当您调整小部件的大小时,滚动条会在需要时出现。
你能不能用一些图片来说明我们。所以我们可以理解这个问题?
好像是个图形问题,所以没有东西可看,很难指导你...
编辑:我相信为了在布局中重新排列 "subwidgets",首先您必须定义这些 "subwidgets" 布局本身的父级。
我已经创建了自己的小部件,我将通过代码将其放入另一个小部件中。表单小部件是使用 qtCreator 创建的。我已经将 "subwidgets" 排列成一个 verticalLayout,以便将一个放在另一个下面,但是由于插入的小部件的数量不固定,我需要一个滚动条。 所以我将我的 verticalLayout 放到了 scrollArea 中,但是滚动条从未出现,为什么?结构 "father->child" 如下: formWidget->scrollArea->verticalLayout 谢谢
编辑:问题如下:我正在从 QPushButton 的单击插槽创建小部件: 在那个小部件的构造函数中,我创建了一个 QScrollArea 和一个 VerticalLayout。 在布局中插入我想要的所有小部件后,我将布局添加到 scrollArea。 这是错误的事情:为了使从按钮创建的小部件中的 scrollArea 可见,有必要将该小部件直接从单击的插槽代码插入滚动条。 有关更多详细信息,我附上单击插槽的代码和小部件构造函数
按钮槽(点击)
scrollArea= new QScrollArea;
scheduleWindow = new Schedule(traceFilePath);
scrollArea->setWidget(scheduleWindow);
scrollArea->resize(scheduleWindow->getWidth(), scheduleWindow->getHeight());
QRect rec = QApplication::desktop()->screenGeometry();
unsigned int desktopHeight = rec.height();
unsigned int desktopWidth = rec.width();
if(scheduleWindow->getWidth() > desktopWidth ||
scheduleWindow->getHeight() > desktopHeight)
scrollArea->showMaximized();
else
scrollArea->show();
小部件构造函数
Schedule::Schedule(QString pathname, QWidget *parent) :
QWidget(parent),
ui(new Ui::Schedule)
{
ui->setupUi(this);
traceParser parser(pathname);
parser.readJson();
ArchitectureParameter arch = parser.getArchParam();
QString taskName;
unsigned int nTasks = 0;
TaskSchedule *t;
for(std::list<QString>::iterator taskNameIter = parser.getTaskNames().begin();
taskNameIter != parser.getTaskNames().end(); taskNameIter++)
{
taskName = *taskNameIter;
nTasks++;
cout<<taskName.toStdString()<<endl;
t = new TaskSchedule(this , taskName, 80, arch.nCPU(), arch.maxTime(),
parser.getExecList(taskName), parser.getTaskSimpleEventsMap(taskName));
ui->pageLayout->addWidget(t);
}
cout<<nTasks<<endl;
width = 2*t->getLineXPosStart() + t->getTickLength()*arch.maxTime();
height = nTasks*(2*TASKSCH_Y_OFFSET + arch.nCPU()*t->getCpuHeight());
ui->area->resize(width, height);
ui->area->setMinimumSize(width, height);
this->adjustSize();
}
垂直布局中的项目是否超过 height/width 限制,因此需要滚动条?据我所知,滚动条只会在超出这些尺寸后显示(不过您应该能够更改此行为)。
你必须像你说的那样放置一个scrollArea。 然后将您想要 "scrollable" 的所有项目拖到该区域内。 一旦它们位于 scrollArea 内,您应该 select 它并设置垂直或水平布局。 然后,当您调整小部件的大小时,滚动条会在需要时出现。
你能不能用一些图片来说明我们。所以我们可以理解这个问题? 好像是个图形问题,所以没有东西可看,很难指导你...
编辑:我相信为了在布局中重新排列 "subwidgets",首先您必须定义这些 "subwidgets" 布局本身的父级。