如何从按钮文本qt中删除和安全

How to remove & safely from button text qt

本文关键字:删除 安全 qt 文本 按钮      更新时间:2023-10-16

我有带有&当我做button->text()时,它返回'&'因为它有一个快捷键,我们有时有超过2个的按钮。

这用于自动远程测试。编写测试的人不是程序员,也不知道对象的名称。

QT如何处理时,显示按钮上的标签没有额外的&号?

一个可能的解决方案?:

qAbstractButton->text().replace(QRegExp("SomeRegex"), "");

你不应该需要按钮的文本。您最有可能使用文本来确定单击了哪个按钮。这是错误的!您应该为按钮提供合理的对象名称。如果你在Qt Designer中设计UI,它们已经有了名字。如果您自己编写代码,请使用setObjectName设置名称。测试线束应该检查焦点小部件的名称。

如果名称不是全局唯一的,测试工具也可以使用父部件的名称,例如

auto widget = qApp->focusWidget();
Q_ASSERT(widget->parent() && widget->parent()->objectName() == "...");
Q_ASSERT(widget->objectName() == "...");

我最终使用了这个算法:

const QString labelOnButton = qAbstractButton->text();
QString fixedLabel;
int i = 0;
int lastIndex = labelOnButton.length() - 1;
while(i < lastIndex)
{
    if (labelOnButton[i] == '&')
    {
        if (labelOnButton[i + 1] == '&')
        {
            fixedLabel += labelOnButton[i];
            ++i;
        }
    }
    else
    {
        fixedLabel += labelOnButton[i];
    }
    ++i;
}
if (labelOnButton[lastIndex] != '&')
{
    fixedLabel += labelOnButton[lastIndex];
}
return fixedLabel;