【发布时间】:2017-02-26 19:21:20
【问题描述】:
如何使用 QString 引用 QObject?我试图根据 Qt 文档和本网站上的类似答案来完成这几种不同的方法,但无济于事。
QString string = "mylabel_"
for(int i = 0; i < my.count(); i++)
{
QString thisString = string + QString::number(i);
QString labelText = ui->thisString->text(); //'ui' has no members named 'thisString'
functions::saveLine(&nameFile, labelText);
}
objectName 只是一个 QString,但以这种方式使用它是行不通的。我也尝试过使用 findChildren,但我可能没有完全理解这个函数的文档。
QList<QWidget *> labels = dialog.findChildren<QWidget *>("mylabel_");
for(int i = 0; i < labels.count(); i++)
{
QString labelText = ui->labels[i]->text(); //'dialog' has no member named 'labels'
functions::saveLine(&nameFile, labelText);
}
最终结果是,我的对话框中有一个 QLabels 列表,我想为其保存文本。我在其他地方成功使用了 saveLine 函数,但在尝试引用该对象时出现上述错误。任何建议都会非常有帮助。
更新:我能够修复它,使其不返回任何错误,但它仍然不返回任何结果,所以我想这个问题现在更针对 findChildren 方法以及 QString 如何转换为 objectName .这是更新后的代码,但它仍然没有返回任何结果。
QList<QLabel *> labels = this->findChildren<QLabel *>("mylabel_");
for(int i = 0; i < labels.count(); i++)
{
QString labelText = labels.at(i)->text();
functions::saveLine(&nameFile, labelText);
}
因此,如果我能够找到所有以 objectName = "mylabel_" 开头的标签,并将它们放入 QList,这将能够从它们中提取文本并将其传递给我的 saveLine 函数实施的。但是,我不知道为什么它没有根据我作为 findChildren 的参数输入的 QString 找到标签。
【问题讨论】:
-
并非所有内容都必须以
ui->开头。不是局部变量。 -
运行 findChildren 后您的列表是否包含任何标签?
-
另外,查看对话框代码会很有帮助。
-
在上面添加的代码中,您尝试引用一个字符串,就像它是一个对象一样 (ui->thisString->text())。你不能那样做。字符串和变量名不同。
-
您的对象是否准确命名为“mylabel_”?如果不是,您将需要使用 QRegExp,而不是字符串:doc.qt.io/qt-5/qobject.html#findChildren-1