在我目前正在处理的函数中,我正在创建一个多维的复选框数组,其中维度由用户在运行时指定。为了表示'z'维度,我创建了多个选项卡 - 每个选项卡代表不同的维度 - 并在每个选项卡中创建一个复选框数组。标签标记为dim1,dim2,dim3,......等。
我遇到的问题是,为了创建复选框数组(在''循环'的3'内),我必须按如下方式调用选项卡:
checkBoxVector.append(new QCheckBox( ui->dim1 ));
checkBoxVector保存指向复选框的指针。现在我的第一个想法是,我只想创建一个随每个循环而变化的变量名。每次迭代,它会:“dim1”,然后是“dim2”,“dim3”,......等等。这个问题是我不能用字符串变量引用标签,我必须输入实际名称标签。以下是该代码的示例:
int num = k+1;
QString dim = "dim";
QString tab_name = dim.append(QString("%1").arg(num));
checkBoxVector.append(new QCheckBox( ui->tab_name ));
这给了我错误“'类Ui :: MainWindow'没有名为'tab_name'的成员。”
因此;我的问题是:如何在每次循环中应用更改选项卡的NAME的想法,而不会导致这样的错误?
编辑:我想我忘了提到标签已经在这时创建了,并且已经标有“dim1”,“dim2”,“dim3”,......名称。我遇到的唯一问题是如何在创建后引用这些选项卡。我觉得有一个简单的语法解决方案。
答案 0 :(得分:0)
将指针存储到数组中的选项卡,并使用您用于迭代多维复选框数组的第三维的变量对其进行索引,您的代码将如下所示:
QTabWidget* tabs[3];
tabs[0] = ui->dim1;
tabs[1] = ui->dim2;
tabs[2] = ui->dim3;
// ... and then
checkBoxVector.append(new QCheckBox( tabs[z] ));
答案 1 :(得分:0)
有人会说它更好(有一个概念名称),但你不能动态声明c ++中的成员...如果你希望QString tab_name
内容以任何方式与{的成员相关{1}}在这部分代码中:
ui
编译器需要在编译时知道QString tab_name = dim.append(QString("%1").arg(num));
checkBoxVector.append(new QCheckBox( ui->tab_name ));
的成员,它将用于查找新ui
的父级。
如果我错了,请更正我,每个标签中都有QCheckBox
个标签和dimz
dimy*dimx
。在构建QcheckBox
文件时,您不知道任何dim*
吗?
因此,创建自己的小部件(ui
)它将存储一个QWidget
数组,您可以在构造函数中动态创建该数组。此小部件将处理复选框的正确布局。
最后,您创建了自己的QcheckBox*
,它将为您的小部件创建QTabWidget
个标签。您将使用与其dimz
坐标对应的索引访问选项卡。
答案 2 :(得分:0)
您正在尝试引用不存在的成员变量:
int num = k+1;
QString dim = "dim";
QString tab_name = dim.append(QString("%1").arg(num));
checkBoxVector.append(new QCheckBox( ui->tab_name ));
错误是由于您将不存在的成员变量传递给QCheckBox的构造函数引起的。 ui指针指向的对象没有名为tab_name的成员变量。如果我正确理解了您的描述,只需将局部变量tab_name传递给QCheckBox构造函数,如下所示:
checkBoxVector.append(new QCheckBox( tab_name ));