如何从左上到右填充 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? 的相关文章

  • TinyMCE 的 addButton() 函数中所有可能的设置属性是什么?

    The 文档 http www tinymce com wiki php API3 method tinymce Editor addButton对此还不是很清楚 name 字符串 要添加的按钮名称 设置 对象 带有标题 cmd 的设置对象
  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • 使用 PyQt 和 matplotlib 在可滚动小部件中显示多个绘图

    由于我没有得到答案this https stackoverflow com questions 12179893 creating a scrollable multiplot with pythons pylab我尝试用 PyQt 解决这
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • QFileInfo::isWritable() 在 Windows 7 上具有完全权限时返回 false

    QFile file filePath QFileInfo fileInfo file file open QIODevice ReadWrite or WriteOnly if fileInfo isWritable Log error
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • 如何将枚举类传递给 QML?

    我正在学习QML with Qt并在通过时遇到一些麻烦enum class to qml 当我使用信号时int参数 一切正常 代码运行完美 But 麻烦就在这里 如果我使用信号与一些enum class我有参数undefinedqml 信号
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何将flex和bison与Qt项目集成?

    我正在 git 源代码控制下使用 Qt4 制作 GUI 程序 Github页面 https github com vinayak garg dic sim 项目的一小部分需要扫描和解析 所以我想在项目中使用flex和bison 我能想到3种
  • 从 Qt 更改屏幕分辨率?

    我想更改屏幕分辨率 然后使用一个 ActiveX 控件 Flash 播放器 进入全屏 显然 仅适用于 Windows 的解决方案就可以了 有 Qt api 吗 还是我需要深入研究 winapi 如果是这样 我该在哪里查找 关键字 谢谢您的帮
  • 如何在不同的QT线程中创建一个窗口?

    我有一个应用程序 其中每个线程 主线程除外 都需要创建自己的窗口 我尝试创建一个线程然后调用this gt exec in the run功能 然而 在我接到那个电话之前我就收到了一个错误 ASSERT failure in QWidget
  • 在Qt中,如何正确实现委托?

    我遵循模型 视图 控制器范例 我很确定模型和视图是正确的 但我认为我的代表做错了一些事情 一切都 有效 除了第一次单击控件只是 点亮控件 而第二次单击与之交互之外 这是代表通常的实施方式吗 我的实现需要大量的构造和销毁 由scoped pt
  • Java setLocation() 事故

    我正处于创建一个程序来操作员工 客户系统的开始阶段 现在我刚刚创建了登录 GUI 但我遇到了一些问题 setLocation 方法 我将其设置为 250 250 但这使我的 GUI 高度变得非常疯狂 如果有人能够解决这个问题 我的代码如下
  • 将下拉项定位在按钮 Flutter 下方

    我正在拼命寻找一种方法将项目放置在按钮下方 正如您所看到的 如果先前选择了第一项 则列表顶部与按钮处于同一级别 但是 如果我之前选择了最后一项 则下拉列表的位置使列表在按钮级别结束 这不是我想要的行为 我希望它始终位于第一个屏幕截图中 即使
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • JTable过滤后正确的行号

    这是一个 try 块 用于过滤 table job 以查找与关键字匹配的行 但是 当表模型发生变化时 我很难获得正确的行索引 它始终选择第一行 即使过滤结果显示的行不是第一行 我知道你可以做一些事情fireTableDataChanged
  • QGraphicsSimpleTextItem“无效使用不完整类型”

    我的代码如下 指针部件 h QGraphicsSimpleTextItem text 指针控件 cpp void PointerWidget placeNumbers float spacing int currentTickNumber
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex

随机推荐

  • 列出 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