QString, удалить ярлыки и контент? - PullRequest
0 голосов
/ 26 августа 2010

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> ....

Есть идеи?

Привет.

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Попробуйте следующее:

#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 голос
/ 26 августа 2010

Мой совет: держите вещи простыми в своем коде, это поможет сделать вещи простыми в вашей голове.

Кажется, то, чего вы хотите достичь, больше связано со строками, чем с метками.

Я предлагаю вам получить текст с вашего ярлыка, затем поработать над ним независимо, а затем связать его с вашим ярлыком:

QString text = message.text();

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

message.setText(text);

Кроме того, ваша ошибка, вероятно, связана с тем, чточто вы пытаетесь изменить напрямую message.text (), который является const ссылкой: очевидно, вы не можете изменить что-то, что const.

Я верю, что вы пытаетесь достичь, можетесделать это с помощью QString :: replace () .Для этого вам придется использовать регулярные выражения, поэтому, если вы с ним не знакомы, это может быть затруднительно.

...