基本上我QGridLayout有一些小部件.重要的是2个标签,我用它们将图像绘制到屏幕上.好吧,如果用户想要,他可以改变传入图像的分辨率,从而迫使标签调整大小.
我们假设标签的初始大小是320x240.用户将VideoMode更改为640x480,标签和整个GUI完美调整大小.但是当用户切换回时320x240,标签会缩小,但布局/窗口不会缩小.
我打得四处sizePolicies和sizeHints和resize(0,0),但没有做的伎俩.有人可以帮我这个吗?
这里有一些截图来澄清问题:

------------ ------
| | | 2 |
| | | |
| 1 | ------
| | ------
| | | 3 |
------------ ------
Run Code Online (Sandbox Code Playgroud)
如何安排QGridLayout上面这样的?
我试过了:
QGridLayout *layout = new QGridLayout();
centralWidget->setLayout (layout);
layout->addWidget (objOne, 0, 0);
layout->addWidget (objTwo, 0, 1);
layout->addWidget (objThree, 1, 1);
Run Code Online (Sandbox Code Playgroud)
但失败了.
我尝试从这样的指定行中删除小部件QGridLayout:
void delete_grid_row(QGridLayout *layout, int row)
{
if (!layout || row < 0) return;
for (int i = 0; i < layout->columnCount(); ++i) {
QLayoutItem* item = layout->itemAtPosition(row, i);
if (!item) continue;
if (item->widget()) {
layout->removeWidget(item->widget());
} else {
layout->removeItem(item);
}
delete item;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用它时,应用程序delete item在第一次迭代中与SIGSEGV崩溃.有任何想法吗?
我有QHBoxLayout我的形式添加到它3点的布局上.第二个有关于我的问题的项目.
我有一个QVBoxLayout在主要布局的第二个窗格(QHBoxLayout).这QVBoxLayout有一个QScrollArea补充addWidget.
这QScrollArea是一个QWidget名为"scrollContents"的父级,后者又包含一个QGridLayout.
我正在为此添加一个自定义创建的小部件,QGridLayout它具有固定的高度.我们100px现在可以考虑这个问题.
如果这个QGridLayout项目的总高度小于表单本身,则它们将这些小部件垂直居中,并在它们之间留出相同的空间.
如果只有一个小部件,它就会出现在中间.但我希望它们从上到下列出.
例:[###代表的区域QScrollArea中,有一个QWidget用了 QGridLayout.
OK -> DESIRED -> NOT DESIRED AND WHAT HAPPENS
########## ########## ##########
# |item| # # |item| # # #
# |item| # # # # #
# |item| # # # # #
# |item| # # # # |item| # …Run Code Online (Sandbox Code Playgroud) 我有一个使用PySide2它构建的应用程序,setColumnStretch用于列拉伸和setRowStretch行拉伸。它运行良好,但我无法理解它是如何工作的。我参考了 qt 文档,但它对我没有帮助。我被困在这些括号内的两个值上。
例如 :
glay = QtWidgets.QGridLayout(right_container)
glay.addWidget(lineedit, 0, 0)
glay.addWidget(button2, 0, 2)
glay.addWidget(widget, 2, 0, 1, 3)
glay.addWidget(button, 4, 0)
glay.addWidget(button1, 4, 2)
glay.setColumnStretch(1, 1) # setColumnStretch
glay.setRowStretch(1, 1) # setRowStretch
glay.setRowStretch(2, 2) # setRowStretch
glay.setRowStretch(3, 1) # setRowStretch
Run Code Online (Sandbox Code Playgroud)
这会产生如下图所示的输出:
但是如何?这四个值里面有glay.addWidget(widget, 2, 0, 1, 3)什么作用呢?请用例子向我解释这一切。
我试图通过为每个项目指定一种权重来找出按比例布局项目的方法。例如,Android 的布局方式。
我试图实现它的方式是这样的:
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
GridLayout {
columns: 4
width: 640
height: 480
Rectangle {
color: "red"
Layout.fillHeight: true
Layout.fillWidth: true
Layout.columnSpan: 1
}
Rectangle {
color: "#80000000"
Layout.fillHeight: true
Layout.fillWidth: true
Layout.columnSpan: 2
}
Rectangle {
color: "blue"
Layout.fillHeight: true
Layout.fillWidth: true
Layout.columnSpan: 1
}
}
Run Code Online (Sandbox Code Playgroud)
我希望中间矩形的宽度是其他两个矩形的总和,但它们的宽度都是相等的。
在 Layout 附加属性上使用关系绑定似乎总是会导致奇怪的绑定循环。我知道我可以只使用 Row 代替关系绑定,但如果可能的话,我更喜欢使用 Layouts。
编辑
这似乎按照我想要的方式工作,但我不知道为什么会这样。它的行为就好像该preferredWidth值是项目的重量。
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
RowLayout {
width: 640 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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 …Run Code Online (Sandbox Code Playgroud) 我想填充QGridLayout用QWidgets.在QWidgets需要出现在左上至右上的方式,并继续向下填补了下来每一行充满后QWidgets.类似且熟悉的GUI的一个例子是Apple如何在iPhone或iPad的主屏幕上对其应用程序进行分类.应用程序从左上角到右上角,并在每行填充后继续向下移动.
现在,每当我添加元素时,它们都会占据整个屏幕和/或不会彼此相邻添加.
这是我正在做的示例代码
m_gridLayout = new QGridLayout(this);
this->setLayout(m_gridLayout);
m_gridLayout->addWidget(widgetToBeAdded, m_currentRow, m_currentColumn, Qt::AlignLeft);
Run Code Online (Sandbox Code Playgroud)
我按预期继续更新m_currentColumn和m_currentRow.在一定数量的列之后,我告诉它改为下一行,没有任何反应.我已通过调试确认它实际上正在吐出正确的行和列.)
最后,我需要抛出一个,QScrollArea以便可以向下滚动网格.
每个的大小都是QWidget一样的.如果我能够在正确分类网格方面获得任何帮助,我们将不胜感激.
编辑:使用下面的答案,我设法让我的项目按正确的顺序排序.但是,在垂直方向上的所有元素之间存在大量空间.正如我想的那样,改变verticalSpacing属性并不能避免这种情况.有谁知道怎么办?
我正在尝试创建一个可停靠工具栏(类似于您在 Photoshop 中使用的工具栏),其中包含 2 x (n) 的按钮网格。我的想法是使用以空白 QWidget 为父级的 QGridLayout,将其添加到 QDockWidget,并将按钮添加到 QGridLayout。除了对齐之外,这似乎有效。
我已经设置了按钮的对齐方式...
myLayout->addWidget(button1,0,0,1,1,Qt::AlignTop);
myLayout->addWidget(button2,0,1,1,1,Qt::AlignTop);
myLayout->addWidget(button3,1,0,1,1,Qt::AlignTop);
myLayout->addWidget(button4,1,1,1,1,Qt::AlignTop);
Run Code Online (Sandbox Code Playgroud)
...但是网格正在扩展到 QDockWidget 的整个高度,如下所示:

按钮也水平扩展,以填充整个空间。我想我可以限制水平调整大小的能力(如果可能的话?)。
我在文档中忽略了一个函数来更好地控制 GridLayout 来限制它填充父小部件的整个宽度/高度吗?作为一个附带问题,有没有办法防止 QDOckWidget 在某个方向上调整大小?
对于这个问题,我指的例子calculator.py从http://zetcode.com/gui/pyqt5/layout/
在示例QGridLayout中使用了 。我想问一下是否可以定义某些特定列/行的宽度/高度?
请看图片。
例如,我希望第二列的宽度为 50px,第三行的高度为 80px。因此,无论窗口有多大/多小,这些 50px 和 80px 始终按定义显示。当窗口大小改变时,其余的行/列可以自动缩放。
我已经搜索过,但找不到答案。
为方便起见,我将代码粘贴到此处(对原始版本略有改动)
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout, QPushButton, QApplication)
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
names = ['Cls', 'Bck', '', 'Close',
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', '.', '=', '+']
positions = [(i,j) for i in range(5) for j in range(4)]
for position, …Run Code Online (Sandbox Code Playgroud) qgridlayout ×10
qt ×8
python ×3
c++ ×2
pyqt ×2
pyqt5 ×2
dock ×1
grid-layout ×1
layout ×1
python-3.x ×1
qdockwidget ×1
qlayout ×1
qml ×1
qscrollarea ×1
qt5 ×1
qwidget ×1
toolbar ×1