如何使用变量名访问QTabWidget类的成员选项卡?

时间:2011-07-15 17:15:00

标签: c++ qt

在我目前正在处理的函数中,我正在创建一个多维的复选框数组,其中维度由用户在运行时指定。为了表示'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”,......名称。我遇到的唯一问题是如何在创建后引用这些选项卡。我觉得有一个简单的语法解决方案。

3 个答案:

答案 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 ));