问题描述
|
好吧,这个问题有点棘手。我的主窗口有一个区域,可让用户指定x和y尺寸,然后单击“生成”按钮。当按下此按钮时,将弹出一个新窗口,其中带有不带标签的复选框的网格(或矩阵,如果您要称为矩阵)。网格具有用户指定的尺寸。然后,用户将选择所需的任何复选框,然后单击“确定”,此时将收集数据,并关闭弹出窗口。
我目前可以正确弹出窗口,但是我完全不知道如何创建此复选框网格。也许使用两个“ for”循环?请提供在运行时创建这些框的示例代码。
对于那些好奇的人,这是我正在研究的GUI的第一步,它允许用户生成用于计算流体动力学仿真的域。
解决方法
你可以这样做:
QVector<QCheckBox*> checkBoxVector;
for(int x = 0; x < 12; ++x){
for(int y = 0; y < 12; ++y){
checkBoxVector.append(new QCheckBox(this));
checkBoxVector.last()->setGeometry(x * 20,y * 20,20,20);
}
}
您希望将指向新创建的项目的指针存储在某个容器类中,以便稍后使用(例如销毁它们)。
这个例子有点简单化了。您必须注意正确销毁对象。使用智能指针向量会使代码更健壮。尽管在这种情况下,由于所有复选框都是窗口或父窗口小部件的子代(在我的示例中为this
指针),因此它们将与父代一起被销毁。因此,只要您只显示一次然后销毁父级,就应该是安全的。
当然,通过这种方式(仅一个矢量),您会以某种方式失去网格的两个维度。如果要按其位置访问单个元素,则必须使用x和y进行一些简单的计算。
或者,您可以使用两个向量,第一个向量保存行,第二个向量又保存行的指针。但这又会使代码稍微复杂一些。