如何获取Qpushbutton上的文本?

4

我正在使用QUiloader加载.ui文件,并在我的应用程序中显示GUI。

QWidget *mywidget = loader.load(file, this);
QList<QWidget*> wlist = mywidget.findChildren<QWidget *>()

我希望了解QPushbutton上的文本是什么。我知道有一种方法text()可以从PushButton中获取文本,但是当我执行以下操作时就无法访问它:
QString btext = wlist.at(1).text();

请问如何在将QPushButton等控件作为QWidget组合使用时获取其文本?

谢谢。


尝试将QWidget转换为QPushButton,然后您就可以使用QPushButton :: text()函数。 - Rud Limaverde
我已经进行了类型强制转换。谢谢。 - amol01
你使用哪种类型转换? - Silicomancer
我这样强制转换类型:dynamic_cast<QPushButton *>(wlist).text(); - amol01
我认为qobject_cast<>()会快一点(至少在Qt4.0.0中是这样),但没关系。无论如何,别忘了之后检查nullptr。 - Silicomancer
对不起,请问nullptr是什么,我应该如何检查它? - amol01
1个回答

4
你应该搜索QPushButtons而不是QWidgets:
QList<QPushButton*> blist = widget.findChildren<QPushButton*>();

即使如此,您的代码仍无法编译。 最后一行应该是:

QString btext = blist.at(1)->text();

由于您访问的是指针而不是小部件,因此请使用->。此外,您应该检查findChildren()函数是否实际返回足够的按钮。当通过无效索引访问列表项时,您会遇到崩溃或断言。

还请注意,at(1)不返回第一个项目,而是返回列表中的第二个项目(列表从0开始)。

更新:如果您搜索QWidgets并对它们进行转换,则需要注意获取nullptr:

QList<QWidget*> wlist = widget.findChildren<QWidget*>();
foreach (QWidget* w, wlist)
{
   QPushButton* b = dynamic_cast<QPushButton*>(w);
   // If "w" is not a button "b" is nullptr
   if (b)
   {
      QString btext = b->text();
   }
}

嘿,谢谢。我需要获取所有的小部件,因此我这样做了。在(1)处,我从循环中复制了我的代码,抱歉。 - amol01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接