0

message.Text() 是一个 QString。

我想删除一些文字。

文本可以是:

  1. 正常:“ This is a text
  2. 带有标签:“ <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);是另一种方法。但就我而言,标签之间的部分是未知的。

它可以是<label1>something</label1><label1>oisdioadj</label><label1>7</label1>......

任何的想法?

问候。

4

2 回答 2

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;
}
于 2010-08-26T12:55:12.453 回答
1

我的建议是:在你的代码中保持简单,这将有助于让你头脑中的事情变得简单。

看起来你想要实现的更多的是与字符串相关,而不是标签。

我建议您从标签中获取文本,然后独立处理,然后将其关联回您的标签:

QString text = message.text();

/* Do whatever you need to do here with text */

message.setText(text);

此外,您遇到的错误可能是由于您尝试直接修改 message.text() ,这是一个const引用:显然您不能修改const.

我相信您尝试实现的目标可以使用QString::replace()来完成。您必须为此使用正则表达式,因此如果您不熟悉它,可能会很困难。

于 2010-08-26T12:26:43.290 回答