我有以下代码段:
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_);
}
结果如下:
我的问题是,当我更改停靠窗口的大小时,我的表格宽度保持不变。知道如何保持表格宽度与码头/布局的大小相同吗?
答案 0 :(得分:0)
表上设置的Minimum
大小政策可能会阻止其展开。如果您希望展开,请将两种尺寸政策都设置为MinimumExpanding
。
当您创建以widget
作为父级的布局时,该布局将设置在widget
上。无需拨打widget->setLayout
。
将小部件添加到布局时,只要在窗口小部件上设置布局,就会重新设置窗口小部件,或者如果窗口小部件上已经设置了布局,则会立即重新布局窗口小部件。因此,您不必将父窗口小部件传递给variable_
,time_
等。
剩余的问题必然存在于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_);