如何从左上到右填充 QGridLayout?

2023-11-21

我想填写一个QGridLayout with QWidgets. The 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);

我继续按预期更新 m_currentColumn 和 m_currentRow。在一定数量的列之后,我告诉它更改到下一行,但什么也没有发生。我已经通过调试确认它实际上吐出了正确的行和列。)

最终,我需要穿上QScrollArea这样就可以向下滚动网格。

每个的大小QWidget会是一样的。如果我能获得有关正确排序网格的任何帮助,我将不胜感激。

编辑:使用下面的答案,我设法让我的项目按正确的顺序排序。然而,所有元素之间在垂直方向上存在大量空间。正如我所想,这并不能通过更改 VerticalSpacing 属性来避免。有谁知道如何进行?


编写您自己的网格布局,如下所示:

Header

#ifndef MY_GRID_LAYOUT_H
#define MY_GRID_LAYOUT_H

#include <QGridLayout>

class my_grid_layout : public QGridLayout
{
public:
    my_grid_layout(QWidget *parent, int max_column_count );
    ~my_grid_layout();

    void add_widget( QWidget* p_widget );

private:
    int m_max_column_count;
};

#endif // MY_GRID_LAYOUT_H

Source

#include "my_grid_layout.h"

my_grid_layout::my_grid_layout(QWidget *parent, int max_column_count)
    : QGridLayout(parent)
{
    m_max_column_count = max_column_count;
}

my_grid_layout::~my_grid_layout()
{

}

void my_grid_layout::add_widget( QWidget* p_widget )
{
    int current_row = 0;
    int current_column = 0;

    while( itemAtPosition(current_row, current_column) != 0 )
    {
        if( current_column == (m_max_column_count-1) )
        {
            current_column = 0;
            ++current_row;
        }
        else
        {
            ++current_column;
        }
    }

    QGridLayout::addWidget( p_widget, current_row, current_column );
}

在主窗口中测试

#include "test_1.h"

Test_1::Test_1(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    m_grid_layout = new my_grid_layout(this,4);

    m_grid_layout->add_widget( new QPushButton( "Widget 0", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 1", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 2", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 3", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 4", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 5", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 6", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 7", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 8", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 9", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 10", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 11", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 12", this ) );
    m_grid_layout->add_widget( new QPushButton( "Widget 13", this ) );



    QWidget* central_widget = new QWidget(this);
    central_widget->setLayout(m_grid_layout);

    setCentralWidget(central_widget);
}

Test_1::~Test_1()
{

}

Result
enter image description here

虽然某个位置已经有一个项目,但切换到网格布局中的下一个位置,在我的示例中,该位置的最大列数为 4。我只是切换到下一列,直到到达第四列。然后我将该列重置为 0 并切换到下一行。只要已经有一个项目,我就会这样做。一旦那个地方没有物品,我就把我的小部件放在那里。

这只是一个简单的示例,但也许足以供您使用。

您应该通过错误处理来增强它,注意无限循环等......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从左上到右填充 QGridLayout? 的相关文章

  • 用 C++/Qt 编写的程序中的 RTF / doc / docx 文本提取

    我正在写一些程序Qt https en wikipedia org wiki Qt 28software 29 C 我需要从中读取文本微软Word https en wikipedia org wiki Microsoft Word RTF
  • 在 QtCreator 中使用 .pro 和 .pri 正确(树)显示 Qt 项目

    是否可以使用项目包含文件 pri 显示不止一个额外级别 例如如果 pro文件包括 pri文件包含两个 pri files pro pri pri pri 在 QtCreator 项目 中显示具有误导性 pro pri pri pri 它根本
  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • 如何在 OS X 上的 Qt 应用程序中设置应用程序图标,足以进行分发?

    跟进这个答案 https stackoverflow com a 20918932 368896 to 这个问题 https stackoverflow com questions 20909341 what is the fastest
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • 如何阻止 JTextPane 吞噬键盘快捷键(加速器)?

    我的应用程序的主 JFrame 包含一个 JTextPane 虽然它具有焦点 但它会消耗所有键盘快捷键 加速器 而不是将它们传递到 JFrame 的 JMenu 这意味着虽然它具有焦点 但 新文档 的 ctrl n 不起作用 显然 它正确处
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • PyQt4 QPalette 不工作

    btn QtGui QPushButton Button self palettes btn palette palettes setColor btn backgroundRole QtCore Qt green btn setPalet
  • 如何doxygen注释Qt属性?

    我想将 Doxygen 注释附加到我的 Q PROPERTY 例如 song h class Song public QObject Q OBJECT private Q PROPERTY QString title READ title
  • PyQt/PySide 中有默认图标吗?

    我正在阅读 PySide 上的教程 我在想 我是否需要为每件事找到自己的图标 或者是否有某种方法可以使用一些内置图标 这样 如果我希望我的小 GUI 在另一个桌面环境上运行 我就不需要找到一套全新的图标 您需要的是 Pyside QIcon
  • 找不到布局变小的原因

    这是我的代码 几乎按预期工作 在讨论问题之前 请先查看代码 请原谅我的代码很长 但这可以像 java 类一样粘贴 我使用 NETBEANS JForm 设计器来获取 GUI package test import java awt even
  • Qt 5.1.1 与 Visual Studio 2012 - 这些 QT 版本无法访问

    打开 Visual Studio 时出现此错误 我安装自http qt project org downloads http qt project org downloads 适用于 Windows 64 位的 Qt 5 1 1 VS 20
  • UIPickerView - 对多行行使用自定义视图 - 需要布局建议

    我有一个 UIPickerView 它将为用户显示项目列表 我希望每个项目都显示为多行文本 每行使用不同的字体大小 一个粗略的模型如下所示 这将允许显示比默认 UIPickerView 的单行所能容纳的更多文本 bdesham 指出我在 U
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A

随机推荐

  • 列出 sbt 1.2.8 中资源目录中的文件

    我有一个 Scala 应用程序 它处理来自某个目录的二进制文件resources 我想得到这个目录java io File并列出所有内容 在最新的 sbt 中 我无法直接做到这一点 我已经针对我的问题创建了最小的存储库 https gith
  • Symfony2 FOSUserBundle 角色实体

    我目前正在尝试找出将教义持久角色实体实现为与 FOSUserBundle 兼容的 M2M 关系的最佳方法 以前 我仅使用默认实现的字符串 并使用学说数组映射来持久化它 现在我需要将角色作为单独的实体 因为我们想要构建一个管理后端 其他人可以
  • 比较 ruby​​ 中的对象

    考虑一下 class Aaa attr accessor a b end x Aaa new x a x b 1 2 y Aaa new y a y b 1 2 puts x y gt false 有没有办法检查相同类型的类中的所有公共属性
  • 从之前的位置恢复 webapp?

    我有一个网络应用程序 它存储用户的数据 以便他们在 iPhone 上的主屏幕应用程序模式下单击外部链接并离开应用程序以查看网页或类似内容 当他们返回网络应用程序时 如何在同一位置恢复 目前它不会到达相同的位置 它重定向到主页我希望它从以前的
  • C 和 C++ 执行时间的差异

    我最近发现了这个名为 codechef 的网站 您可以在其中提交问题的解决方案 我为一个问题提交了两个答案 一个用 C 语言 另一个用 C 语言 两个代码几乎相同 但是当我用C提交的代码在4 89s执行时 我用C 提交的代码超时了 超过8秒
  • 创建文件 获取文件时间 设置文件时间

    我在使用 GetFileTime 和 SetFileTime 时遇到问题 当涉及到目录时 具体来说我认为我的问题是 我是 WinAPI 的新手 我认为我没有得到 正确处理 有两种情况 首先 我只需要一个句柄来获取文件或目录 时间戳 创建 访
  • 类型错误:格式字符串参数不足 - 使用 %Y-%m 时 Python SQL 连接

    with engine connect as con rs con execute SELECT datediff STR TO DATE CONCAT year month day Y m d current date from TABL
  • .setVisible(true) 立即重绘

    在一个简短的方法中 我使用 setVisible false 隐藏 JFrame 然后我截取屏幕截图并使用 setVisible true 恢复 JFrame 再次可见后 窗口应该显示与之前不同的图片 假设截取的屏幕截图的一部分 问题是 在
  • 如何从命令行使用 MSBuild 构建所有内容?

    这是有效的吗 MSBuild t all configuration all 我想使用 Visual Studio 2008 中的 MSBuild 从命令行构建 sln 文件等中所有项目的所有配置 我不想在调用 MSBuild 时指定它们
  • 如何在 cypress 测试中公开/访问 Redux 等数据存储?

    The 赛普拉斯文档说你可以 公开数据存储 如 Redux 中 以便您可以直接从测试代码以编程方式更改应用程序的状态 我还观看了 Kent C Dodds 先生的测试课程 他提到可以使用 Cypress 中的现有数据来初始化 redux 存
  • C++ 中的并行赋值

    有没有办法在C 中进行并行赋值 目前 以下编译 带有警告 include
  • 设置文本字段的禁用背景颜色

    I have a textfield which I set seteditable false and setEnabled false but the problem is that in this case the backgroun
  • 如何实现rabbitMQ的单消费者多队列模型

    我发现这张图片与我的商业模式非常相似 我需要将消息拆分到某个队列 进行一些繁重的工作 我可以为他们添加更多的工作线程 但对于一些人来说 没有太多繁重的工作 我可以 让单个消费者订阅他们的消息 但是在rabbitMQ 中如何做到这一点呢 通过
  • Rails 3 中具有数组格式的 find_by_sql

    美好的一天伙计们 我在用着find by sql 在 Rails 3 中按如下方式获取记录 list Email find by sql SELECT FROM Emails WHERE sent id params id 如果多个参数适用
  • SwiftUI如何调整不同的屏幕尺寸

    我正在使用 SwiftUI 开发人员列表页面 iPhone X 屏幕足够大 但标题在 iPhone 8 中超出屏幕 iPhone X 然而 在 iPhone 8 或更小的屏幕中 查找人员 太靠近左侧 全部关注 甚至超出了屏幕 我知道在 UI
  • 如何在 python 中规范化二维 numpy 数组而不那么冗长?

    给定一个 3 乘以 3 的 numpy 数组 a numpy arange 0 27 3 reshape 3 3 array 0 3 6 9 12 15 18 21 24 为了标准化我想到的二维数组的行 row sums a sum axi
  • 将 Ninject 与 Udi Dahan 的领域事件结合使用

    我在 MVC 项目中使用 Ninject 并尝试按照 Udi Dahan 的模式实现领域事件http www udidahan com 2009 06 14 domain events salvation 在下面的摘录中 容器 用于解析已引
  • sqlite 数据库表在测试时被锁定

    我正在尝试将应用程序从 django 1 11 1 迁移到 django 2 0 1 测试设置为在内存数据库中使用 sqlite 运行 但每次测试都失败了 因为sqlite3 OperationalError database table
  • git 忽略异常

    我有一个 gitignore 文件 它使 git 忽略 dll文件 这实际上是我想要的行为 但是 如果我想要一个例外 即能够提交foo dll 我怎样才能做到这一点 Use dll Exclude all dlls foo dll Exce
  • 如何从左上到右填充 QGridLayout?

    我想填写一个QGridLayout with QWidgets The QWidgets需要以从左上到右上的方式出现 并在每行填充后继续向下填充QWidgets 类似且熟悉的 GUI 的一个例子是 Apple 如何在 iPhone 或 iP