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>
....
有什么想法吗?
问候。
答案 0 :(得分:2)
尝试以下方法:
#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;
}
答案 1 :(得分:1)
我的建议是:在代码中保持简单,这将有助于简化您的工作。
您希望实现的内容与字符串相关,而不是标记。
我建议您从标签上获取文字,然后单独处理,然后将其与标签联系起来:
QString text = message.text();
/* Do whatever you need to do here with text */
message.setText(text);
此外,您遇到的错误可能是由于您尝试直接修改message.text()这是一个 const 引用:显然您无法修改const
。
我相信您尝试实现的目标可以使用QString::replace()完成。你必须使用正则表达式,所以如果你不熟悉它,可能会很困难。