题
message.text()是QString。
我想删除一些文字。
文本可以是:
- 普通的: ”
This is a text
" - 带有标签:”
<label1>something</label1>This is a text
"
首先,我发现文本是否具有标签:
!message.Text().contains("<label1>", Qt::CaseInsensitive))
因此,如果有的话,我想删除第一部分,以便具有正常文本“这是文本”。
我尝试了:
first=message.Text().indexOf("<label1>");
last=message.Text().lastIndexOf("</label1>");
message.Text().remove(first,last);
但是我有编译器错误C2663。
我也知道 message.Text().remove(QChar('<label1'), Qt::CaseInsensitive);
是另一种方法。但是就我而言,标签之间的部分是Unkwnow。
有可能 <label1>something</label1>
或者 <label1>oisdioadj</label>
或者 <label1>7</label1>
....
任何的想法?
问候。
解决方案
尝试以下操作:
#include <iostream>
using std::cout; using std::endl;
#include <QString>
int main()
{
QString message = "<label1>something</label1>This is a test";
const QString labelClose = "</label1>";
const int labelCloseSize = labelClose.size();
cout << "message: " << qPrintable(message) << endl;
const int closePosition = message.lastIndexOf(labelClose);
QString justText = message.remove(0, closePosition + labelCloseSize);
cout << "just text: " << qPrintable(justText) << endl;
}
其他提示
我的建议在这里:将事情放在您的代码中,这将有助于使您的脑海中的事情变得简单。
似乎您想要实现的目标与字符串更相关,而不是标签。
我建议您从标签中获取文字,然后独立处理,然后将其与您的标签相关联:
QString text = message.text();
/* Do whatever you need to do here with text */
message.setText(text);
另外,您遇到的错误可能是由于您尝试直接修改Message.Text()是一个事实 const 参考:显然您无法修改某些内容 const
.
我相信您尝试实现的目标可以使用 QSTRING ::替换(). 。您必须为此使用正则表达式,因此,如果您不熟悉它,那可能很困难。
不隶属于 StackOverflow