标签: qgridlayout

Qt布局,在窗口小部件大小更改后调整为最小值

基本上我QGridLayout有一些小部件.重要的是2个标签,我用它们将图像绘制到屏幕上.好吧,如果用户想要,他可以改变传入图像的分辨率,从而迫使标签调整大小.

我们假设标签的初始大小是320x240.用户将VideoMode更改为640x480,标签和整个GUI完美调整大小.但是当用户切换回时320x240,标签会缩小,但布局/窗口不会缩小.

我打得四处sizePoliciessizeHintsresize(0,0),但没有做的伎俩.有人可以帮我这个吗?

这里有一些截图来澄清问题:

在这里,一切都很好 仍然,640 x 480完美调整大小 但在这里,布局太大了.

layout qt qgridlayout qt5

22
推荐指数
2
解决办法
3万
查看次数

如何在QGridLayout中排列项目如图所示?

------------  ------
|          |  | 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)

但失败了.

qt qgridlayout

15
推荐指数
2
解决办法
3万
查看次数

从QGridLayout中删除小部件

我尝试从这样的指定行中删除小部件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崩溃.有任何想法吗?

c++ qt qgridlayout

13
推荐指数
1
解决办法
2万
查看次数

Qt QGridLayout自动将项目中心(移动)到中间.

我有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)

c++ python qt qscrollarea qgridlayout

9
推荐指数
2
解决办法
1万
查看次数

setColumnStretch 和 setRowStretch 如何工作

我有一个使用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)什么作用呢?请用例子向我解释这一切。

python pyqt python-3.x qgridlayout pyqt5

9
推荐指数
1
解决办法
4032
查看次数

QML 布局:如何为行或列布局中的项目赋予权重?

我试图通过为每个项目指定一种权重来找出按比例布局项目的方法。例如,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)

qt qml qgridlayout

7
推荐指数
1
解决办法
1933
查看次数

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

我正在尝试使用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)

qt qgridlayout qlayout

6
推荐指数
1
解决办法
1万
查看次数

如何从左上角到右边填充QGridLayout?

我想填充QGridLayoutQWidgets.在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属性并不能避免这种情况.有谁知道怎么办?

user-interface qt grid-layout qwidget qgridlayout

6
推荐指数
1
解决办法
1万
查看次数

带有 QGridLayout 的 QDockWidget - 布局内的小部件未与顶部对齐

我正在尝试创建一个可停靠工具栏(类似于您在 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 在某个方向上调整大小?

qt dock toolbar qdockwidget qgridlayout

5
推荐指数
1
解决办法
6881
查看次数

如何将宽度/高度固定到 QGridLayout 中的特定列/行?

对于这个问题,我指的例子calculator.pyhttp://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)

python pyqt qgridlayout pyqt5

5
推荐指数
1
解决办法
8658
查看次数