QGridLayout,3个窗格,没有正确扩展

jbr*_*nan 6 qt qgridlayout qlayout

我正在尝试使用a布局窗口(所有代码)QGridLayout.我可以添加小部件到布局,它们显示在我的窗口中,但我无法弄清楚如何正确调整它们的大小.这就是我想要的

[Leftmost][--------Center---------][Rightmost]
Run Code Online (Sandbox Code Playgroud)

这些是我窗口的3个"窗格"(所有三个列表).左侧和右侧应该具有静态宽度并且拥抱它们各自的侧面,并且当窗口增大(或收缩)时,中心应该扩展以填充宽度.

一些代码:

// Create the subviews, add them to a grid layout, and set the layout to the window.
QTableView *list = new QTableView(0);
list->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QTableView *flashList = new QTableView(0);
flashList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

QPushButton *infoButton = new QPushButton("Info!");
QPushButton *flashFeedsButton = new QPushButton("Flashfeeds");

QGridLayout *gridLayout = new QGridLayout;



// Set the minimum widths for all three columns of the grid
gridLayout->setColumnMinimumWidth(GridColumnFirst, 300);
gridLayout->setColumnMinimumWidth(GridColumnSecond, 300);
gridLayout->setColumnMinimumWidth(GridColumnThird, 300);

// Set the minimum heights for all rows of the grid
int headerFooterHeight = 44;
gridLayout->setRowMinimumHeight(GridRowFirst, headerFooterHeight);
gridLayout->setRowMinimumHeight(GridRowSecond, 200);
gridLayout->setRowMinimumHeight(GridRowThird, headerFooterHeight);


// Set the stretch factors
gridLayout->setColumnStretch(GridColumnFirst, 1);
gridLayout->setColumnStretch(GridColumnFirst, 2);
gridLayout->setColumnStretch(GridColumnThird, 1);

gridLayout->addWidget(list, 1, 0, Qt::AlignLeft);
gridLayout->addWidget(flashList, 1, 1, Qt::AlignCenter);
gridLayout->addWidget(infoButton, 0, 3, Qt::AlignRight);
gridLayout->addWidget(flashFeedsButton, 0, 1, Qt::AlignLeft);

_mainWindow->setLayout(gridLayout);
Run Code Online (Sandbox Code Playgroud)

(正如你可能会说的那样,这最终将是一个9x9网格,但重点仍然是,我正在努力让我的中间行(GridRowSecond)拥有弹性列.

行本身扩展得很好.问题似乎是让每个单元格中的小部件扩展以占用其容纳空间.我该怎么做呢?(另外,垂直方向,我的列表正在正常扩展,但不是水平扩展).

Kal*_*son 8

查看QGridLayout :: AddWidget上的文档:

默认对齐方式为0,这意味着小部件填充整个单元格.

但是你有以下几点:

gridLayout->addWidget(list, 1, 0, Qt::AlignLeft);
gridLayout->addWidget(flashList, 1, 1, Qt::AlignCenter);
gridLayout->addWidget(infoButton, 0, 3, Qt::AlignRight);
gridLayout->addWidget(flashFeedsButton, 0, 1, Qt::AlignLeft);
Run Code Online (Sandbox Code Playgroud)

因此,您已经明确地告诉网格布局您希望窗口小部件分别对齐其单元格的左侧,中间,右侧和左侧.在您的情况下,您可能希望使用默认对齐方式,允许窗口小部件填充单元格并遵循各自的大小策略.