QString, удалите этикетки и контент?
Вопрос
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);
это еще один способ сделать это. Но в моем случае часть между этикеткой не работает.
Это может быть <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);
Кроме того, ошибка, которую вы имеете, вероятно, связаны с тем, что вы пытаетесь изменять напрямую сообщение. Text (), который является конститут Ссылка: очевидно, вы не можете изменить то, что есть const
.
Я верю, что вы пытаетесь достичь, можно сделать, используя QString :: Заменить (). Отказ Вам придется использовать регулярные выражения для этого, поэтому, если вы не знакомы с этим, это может быть сложно.