【问题标题】:Create a Grid Layout Dynamically and manage it in Qt动态创建网格布局并在 Qt 中管理它
【发布时间】:2017-05-27 23:54:15
【问题描述】:

我是 Qt 的新手,目前遇到了一些麻烦。我想从 C++ 代码在 Qt 中创建一个网格布局,并能够从那里管理它。我尝试了很多不同的方法,但都没有奏效。

基本上,我想要做的是有一个带有按钮的窗口(完成此操作),并且通过按下按钮,窗口应该变成一个没有固定行数或列数的按钮网格。 (希望我清楚我想做什么)

此时,我创建了两个 .qml ,一个 qml 文件具有第一个窗口的代码(具有唯一按钮的那个),另一个 qml 文件具有网格布局,其中没有任何内容。还有两个 c++ 文件,第一个是 main.cpp,第二个是我正在编写的代码,用于在单击按钮时“填充”网格。

再次重申,我是 Qt 新手,如果您有更好的想法,请告诉我!

【问题讨论】:

  • 如果你能添加一些代码而不是描述你做了什么,那就太好了。无论如何,从 C++ 创建和管理 QML 对象有什么意义?仅使用 QM 很简单。
  • @folibis 我将如何创建具有未知数量的维度和每个单元格中的多个按钮的网格?
  • 你必须澄清这一点。什么意思 - 维度数未知?
  • @folibis 我的意思是每次创建这个窗口时都会随机生成数字维度,也就是说按钮的数量也不是静态的(dimensionX*dimensionY)。基本上,我想在 qml 文件中重复创建按钮。给您带来的不便深表歉意!
  • 哇...@derM 小心这些例子-)

标签: c++ qt grid qml qgridlayout


【解决方案1】:

您可以使用Repeater 创建一定数量的Buttons 作为Grid 的子代。 Grid 会自动设置Buttons 的位置,所以你不应该设置任何anchors 或坐标。

要处理信号,您可以在某处定义一个信号,然后将其连接到按钮信号。

Grid {
    id: buttonGrid
    signal buttonClicked(int index)
    Repeater {
        model: 100 // or any integer number
        delegate: Button {
            onClicked: buttonGrid.buttonClicked(index)
        }
    }
}

除了使用整数模型,您还可以使用 ListModel 或任何 QAbstractItemModel-descendent。然后,您还可以使用它们的角色,获取诸如文本、颜色或功能之类的东西...

带有文本的简单数组也是可能的。

【讨论】:

  • 信号是我所需要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2018-07-20
  • 2018-12-10
相关资源
最近更新 更多