c++ - 动态创建网格布局并在 Qt 中管理它

标签 c++ qt grid qml qgridlayout

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

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

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

同样,我是 Qt 的新手,所以如果您有任何更好的想法,请告诉我!

最佳答案

您可以使用 Repeater 创建一定数量的 Button 作为 Grid 的子项。 Grid 将自动设置 Button 的位置,因此您不应设置任何 anchors 或坐标。

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

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

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

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

关于c++ - 动态创建网格布局并在 Qt 中管理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44222593/

相关文章:

c++ - CMake 应用依赖于基于 Qt 的库

extjs - 使用同一个 Store 填充 2 个网格

c++ - 从用户定义的类/指向成员函数的指针子类化编辑控件

c++ - 传递给虚拟析构函数的这个额外参数是什么?

c++ - QNetworkAccessManager上传到本地FTP服务器

user-interface - 无法通过 knockout 删除剑道网络网格的项目

java - 选择行的列后,网格移动到 GWTEXT 的 EditorGridPanel 的左侧

c++ - 如何在 Box2D 中创建橡胶线?

c++ - 运算符+重载问题

c++ - Qt ActiveX 动态调用 : bad parameter count