Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用变量名访问QTabWidget类的成员选项卡?_C++_Qt - Fatal编程技术网

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

C++ 如何使用变量名访问QTabWidget类的成员选项卡?,c++,qt,C++,Qt,在我目前正在处理的一个函数中,我正在创建一个多维复选框数组,其维度由用户在运行时指定。为了表示“z”维度,我创建了多个选项卡——每个选项卡表示不同的维度——并在每个选项卡中创建一个复选框数组。选项卡标记为dim1、dim2、dim3等。。。等等 我遇到的问题是,为了创建复选框数组(在3个“for”循环中),我必须按如下方式调用选项卡: checkBoxVector.append(new QCheckBox( ui->dim1 )); 其中checkBoxVector包含指向复选框的指针。

在我目前正在处理的一个函数中,我正在创建一个多维复选框数组,其维度由用户在运行时指定。为了表示“z”维度,我创建了多个选项卡——每个选项卡表示不同的维度——并在每个选项卡中创建一个复选框数组。选项卡标记为dim1、dim2、dim3等。。。等等

我遇到的问题是,为了创建复选框数组(在3个“for”循环中),我必须按如下方式调用选项卡:

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 ));
这会导致错误“'class Ui::MainWindow'没有名为'tab_name'的成员”

因此,;我的问题是:如何在每个循环中应用更改选项卡名称的想法,而不会导致这样的错误


编辑:我想我忘了提到标签已经在这一点上创建了,并且已经被标记为“dim1”、“dim2”、“dim3”。。。名字。我唯一的问题是如何在创建这些选项卡后引用它们。我觉得有一个简单的语法解决方案。

将指向选项卡的指针存储在数组中,并使用用于在多维复选框数组的第三维上进行迭代的变量对其进行索引,您的代码如下所示:

QTabWidget* tabs[3];
tabs[0] = ui->dim1;
tabs[1] = ui->dim2;
tabs[2] = ui->dim3;

// ... and then

checkBoxVector.append(new QCheckBox( tabs[z] ));
checkBoxVector.append(new QCheckBox( tab_name ));

<>某人会说得更好(有一个概念名称),但是你不能动态地声明C++中的成员…如果您希望
QString tab\u name
内容以任何方式与
ui
这部分代码中的成员相关:

QString tab_name = dim.append(QString("%1").arg(num));
checkBoxVector.append(new QCheckBox( ui->tab_name ));
编译器需要在编译时知道
ui
的哪个成员将用于查找新
QCheckBox
的父级

如果我错了,请纠正我,每个选项卡中都有
dimz
选项卡和
dimy*dimx
QcheckBox
。当您构建
ui
文件时,您不知道任何
dim*

因此,创建您自己的小部件(
QWidget
),它将存储一个
QcheckBox*
数组,您可以在构造函数中动态创建该数组。此小部件将负责复选框的正确布局


最后,您创建自己的
QTabWidget
,它将创建小部件的
dimz
选项卡。您将使用与
z
坐标对应的索引访问选项卡

您试图引用的成员变量不存在:

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\u name的成员变量。如果我正确理解了您的描述,只需将局部变量tab_名称传递给QCheckBox构造函数,如下所示:

QTabWidget* tabs[3];
tabs[0] = ui->dim1;
tabs[1] = ui->dim2;
tabs[2] = ui->dim3;

// ... and then

checkBoxVector.append(new QCheckBox( tabs[z] ));
checkBoxVector.append(new QCheckBox( tab_name ));

我认为这不能解决我的问题。这是一种干净的存储选项卡的方法,但是我仍然无法在这里遍历选项卡的名称。请记住,我有一个未知数量的选项卡,因此我仍然必须使用我的“ui->tab_name”解决方案(该解决方案不起作用)。该解决方案使每个复选框在其自己的单独窗口中创建,旁边有一个标签,可以读取tab_name变量中包含的任何内容。假设我创建了一个包含2*3*2个复选框的数组,它只会弹出12个窗口,每个窗口中都有一个复选框;但是,我是否也需要创建一个新数组(或者至少是checkBoxVector的另一个维度)来保存复选框?我的意思是,我以后需要能够访问代码中每个复选框的状态,如果我只是从同一个小部件复制相同的数组z次,我需要为每个选项卡创建一个新的复选框数组,无论我是否希望能够访问它们。因此,我回到了我目前在代码中的位置。这里并不是说从
ui
中分离数据不是一个更好的选择,但您可以轻松创建一个方便的访问器,让它命名为
QCheckBox*getCheckBox(int x,int y,int z)
在您的选项卡小部件中,它将返回索引为
z
的选项卡的
dimx+y*dimy
QCheckBox
。问题是,我已经在代码的前面创建了选项卡,唯一真正的问题是,我只是尝试使用我的“for”循环按名称引用它们。我觉得我缺少一个简单的语法解决方案。对不起,我编辑了我的问题以提供更多的信息,因为我想我忘了提到这个!还有其他建议吗?我在这里真正需要的是能够迭代QTabWidget成员的名称。这些选项卡是如何创建的?给我们看一些代码。