如何获取 qpushbutton 上的文本?

Posted

技术标签:

【中文标题】如何获取 qpushbutton 上的文本?【英文标题】:How to get the text on qpushbutton? 【发布时间】:2022-01-03 09:17:13 【问题描述】:

我正在通过 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()函数了。 我确实投了它。谢谢。 你使用哪种演员阵容? 我这样投射:dynamic_cast(wlist).text(); 我认为 qobject_cast() 有点快(至少在 Qt4.0.0 中),但这很好。无论如何不要忘记之后检查 nullptr。 【参考方案1】:

您应该搜索 QPushButtons 而不是 QWidgets:

QList<QPushButton*> blist = widget.findChildren<QPushButton*>();

您的代码仍然无法编译。最后一行应该是:

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

使用-&gt;,因为您访问的是指针,而不是小部件。您还应该检查 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)处,我从循环中复制了我的代码,对不起。

以上是关于如何获取 qpushbutton 上的文本?的主要内容,如果未能解决你的问题,请参考以下文章

Qt中槽函数如何获取按钮QPushButton的按钮文本

PySide:如何在 QPushButton 单击槽中获取单击的 QPushButton 对象?

如何在“QSettings”中保存/更改“QLineEdit”的文本并进行“QPushButton”调用

如何使 QPushButtons 将文本添加到 QLineEdit 框中?

更改按钮文本时如何自动更改 QPushButton 宽度和 QMenuBar 角小部件宽度?

Qt 4.8:显示窗口时选择 QPushButton 上的文本