VBoxLayout中的QTableWidget不调整大小

时间:2014-02-21 22:47:41

标签: qt

我有以下代码段:

PDFViewer::PDFViewer(const QString &title, MainWindow *mainWindow, Qt::WindowFlags flags) :
    QDockWidget(title, mainWindow, flags),

    mainWindow_(mainWindow)
{
    setObjectName("PDFViewer");

    setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

    layoutWidget_ = new QWidget(this);
    verticalLayout_ = new QVBoxLayout(layoutWidget_);

    variable_ = new QLabel(layoutWidget_);
    time_ = new QLabel(layoutWidget_);
    PDFTable_ = new PDFTable(mainWindow_, layoutWidget_);
    PDFPlot_ = new QWidget(layoutWidget_);

    verticalLayout_->addWidget(variable_, 0, Qt::AlignLeft | Qt::AlignTop);
    verticalLayout_->addWidget(time_, 0, Qt::AlignLeft | Qt::AlignTop);
    verticalLayout_->addWidget(PDFTable_, 1, Qt::AlignLeft | Qt::AlignTop);
    verticalLayout_->addWidget(PDFPlot_, 1, Qt::AlignLeft | Qt::AlignTop);

    PDFTable_->horizontalHeader()->hide();
    PDFTable_->verticalHeader()->hide();
    PDFTable_->setAlternatingRowColors(true);
    PDFTable_->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);

    layoutWidget_->setLayout(verticalLayout_);

    setWidget(layoutWidget_);
}

结果如下:

enter image description here

我的问题是,当我更改停靠窗口的大小时,我的表格宽度保持不变。知道如何保持表格宽度与码头/布局的大小相同吗?

1 个答案:

答案 0 :(得分:0)

  1. 表上设置的Minimum大小政策可能会阻止其展开。如果您希望展开,请将两种尺寸政策都设置为MinimumExpanding

  2. 当您创建以widget作为父级的布局时,该布局将设置在widget上。无需拨打widget->setLayout

  3. 将小部件添加到布局时,只要在窗口小部件上设置布局,就会重新设置窗口小部件,或者如果窗口小部件上已经设置了布局,则会立即重新布局窗口小部件。因此,您不必将父窗口小部件传递给variable_time_等。

  4. 剩余的问题必然存在于PDFTable_的实施中 - 我们需要知道为什么它行为不端。要确认,请将PDFTable_替换为QWidget - 如果代码行为

    您的代码可以简化如下,插入QWidget用于测试目的:

    setObjectName("PDFViewer");
    
    setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    
    layoutWidget_ = new QWidget(this);
    verticalLayout_ = new QVBoxLayout(layoutWidget_);
    
    variable_ = new QLabel();
    time_ = new QLabel();
    PDFTable_ = new QWidget(); //(mainWindow_);
    PDFPlot_ = new QWidget();
    
    verticalLayout_->addWidget(variable_, 0, Qt::AlignLeft | Qt::AlignTop);
    verticalLayout_->addWidget(time_, 0, Qt::AlignLeft | Qt::AlignTop);
    verticalLayout_->addWidget(PDFTable_, 1, Qt::AlignLeft | Qt::AlignTop);
    verticalLayout_->addWidget(PDFPlot_, 1, Qt::AlignLeft | Qt::AlignTop);
    
    #if 0
    PDFTable_->horizontalHeader()->hide();
    PDFTable_->verticalHeader()->hide();
    PDFTable_->setAlternatingRowColors(true);
    #endif
    PDFTable_->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
    PDFTable_->setStyleSheet("background: yellow"); // to see it
    
    setWidget(layoutWidget_);