Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置QTabWidget的初始大小_Qt_Qt5_Qtabwidget_Qscrollarea - Fatal编程技术网

设置QTabWidget的初始大小

设置QTabWidget的初始大小,qt,qt5,qtabwidget,qscrollarea,Qt,Qt5,Qtabwidget,Qscrollarea,我正在创建一个QTabWidget,它有许多选项卡,每个选项卡包含不同数量的按钮。因为其中一些选项卡可能包含许多按钮,所以我希望每个选项卡都可以滚动 我有一个类似的实现,但不管我怎么做,我都无法让darn QTabWidget具有特定的垂直大小——它总是希望根据其中一个页面使用的最大高度来调整自己的大小。我尝试过改变规模政策、布局策略,但没有任何效果 下面是我正在使用的确切小部件结构: QFrame QSplitter QTabWidget QFrame

我正在创建一个QTabWidget,它有许多选项卡,每个选项卡包含不同数量的按钮。因为其中一些选项卡可能包含许多按钮,所以我希望每个选项卡都可以滚动

我有一个类似的实现,但不管我怎么做,我都无法让darn QTabWidget具有特定的垂直大小——它总是希望根据其中一个页面使用的最大高度来调整自己的大小。我尝试过改变规模政策、布局策略,但没有任何效果

下面是我正在使用的确切小部件结构:

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”。很奇怪。可能是布局引擎进来了,抹掉了你所做的。你有没有试过那个可怕的单发计时器?