设置QTabWidget的初始大小
我正在创建一个QTabWidget,它有许多选项卡,每个选项卡包含不同数量的按钮。因为其中一些选项卡可能包含许多按钮,所以我希望每个选项卡都可以滚动 我有一个类似的实现,但不管我怎么做,我都无法让darn QTabWidget具有特定的垂直大小——它总是希望根据其中一个页面使用的最大高度来调整自己的大小。我尝试过改变规模政策、布局策略,但没有任何效果 下面是我正在使用的确切小部件结构:设置QTabWidget的初始大小,qt,qt5,qtabwidget,qscrollarea,Qt,Qt5,Qtabwidget,Qscrollarea,我正在创建一个QTabWidget,它有许多选项卡,每个选项卡包含不同数量的按钮。因为其中一些选项卡可能包含许多按钮,所以我希望每个选项卡都可以滚动 我有一个类似的实现,但不管我怎么做,我都无法让darn QTabWidget具有特定的垂直大小——它总是希望根据其中一个页面使用的最大高度来调整自己的大小。我尝试过改变规模政策、布局策略,但没有任何效果 下面是我正在使用的确切小部件结构: QFrame QSplitter QTabWidget QFrame
QFrame
QSplitter
QTabWidget
QFrame
我用用作页面的QWidget实例填充QTabWidget。这些实例用QScrollArea包装,并使用QGridLayout,这样我就可以用网格中的按钮填充选项卡
下面是填充选项卡小部件的实际代码:
for (const std::string &tabName : tabs) {
// Grid layout for each tab
QGridLayout *gridLayout = new QGridLayout();
// The tab widget itself
QWidget *page = new QWidget(tabWidget);
page->setLayout(gridLayout);
// Wrap tab with a scroll area so that it's scrollable when the tab widget
// is resized to be smaller than the page size
QScrollArea *scrollArea = new QScrollArea(tabWidget);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(page);
tabWidget->addTab(scrollArea, tabName.c_str());
// Populate tab with push buttons
const std::vector<std::string> &buttons = GetButtons(tabName);
for (const std::string &buttonName : buttons) {
QPushButton *button = new QPushButton(buttonName.c_str());
button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
QSize buttonSize(130, 20);
button->setFixedSize(buttonSize); // <=== this does work
int row = i / numColumns;
int col = i % numColumns;
gridLayout->addWidget(button, row, col, Qt::AlignLeft | Qt::AlignTop);
}
}
// This does not work
const int fixedVerticalSize = 120;
tabWidget->resize(tabWidget->size().width(), fixedVerticalSize);
for(const std::string和tabName:tabs){
//每个选项卡的网格布局
QGridLayout*gridLayout=新的QGridLayout();
//选项卡小部件本身
QWidget*页面=新的QWidget(tabWidget);
页面->设置布局(网格布局);
//使用滚动区域包装tab,以便在tab小部件启动时可以滚动
//大小调整为小于页面大小
QScrollArea*scrollArea=新的QScrollArea(tabWidget);
scrollArea->SetWidgetResizeable(真);
scrollArea->setWidget(第页);
tabWidget->addTab(滚动区域,tabName.c_str());
//用按钮填充选项卡
const std::vector&buttons=GetButtons(tabName);
用于(常量标准::字符串和按钮名称:按钮){
QPushButton*button=新的QPushButton(buttonName.c_str());
按钮->设置策略(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed));
QSize按钮化(130,20);
按钮->设置固定大小(按钮大小);//添加小部件(按钮、行、列、Qt::AlignLeft | Qt::AlignTop);
}
}
//这行不通
常数int fixedVerticalSize=120;
tabWidget->resize(tabWidget->size().width(),fixedVerticalSize);
顺便说一句,我正在Mac OS X 10.8.2上使用Qt 5.0.2。您是否尝试过
tabWidget->setMaximumHeight(fixedVerticalSize)代码>?您还可以添加tabWidget->setMinimumHeight(fixedVerticalSize)代码>,如果你想让它真正被修复的话。我已经试过了,但是1)这不是我想要的行为;我仍然想让用户调整tab小部件的大小。我只想设置初始大小,2)出于某种原因,它仍然以最大选项卡大小开始,但如果我尝试使用拆分器调整其大小,它会立即捕捉到“fixedVerticalSize”。很奇怪。可能是布局引擎进来了,抹掉了你所做的。你有没有试过那个可怕的单发计时器?