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); 是另一种方法。但是就我而言,标签之间的部分是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 ::替换(). 。您必须为此使用正则表达式,因此,如果您不熟悉它,那可能很困难。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top