Question

message.Text () est un QString.

Je veux supprimer un texte.

Le texte peut être:

  1. Normal: "This is a text"
  2. Avec une étiquette: "<label1>something</label1>This is a text"

Tout d'abord, je trouve que le texte a l'étiquette:

!message.Text().contains("<label1>", Qt::CaseInsensitive))

Alors, si elle a, je veux supprimer la première partie, d'avoir un texte normal « Ceci est un texte ».

J'ai essayé ceci:

first=message.Text().indexOf("<label1>");
last=message.Text().lastIndexOf("</label1>");
message.Text().remove(first,last);

Mais je suis arrivé erreur du compilateur C2663.

Je sais aussi que le message.Text().remove(QChar('<label1'), Qt::CaseInsensitive); est une autre façon de le faire. Mais dans mon cas, la partie entre l'étiquette est unkwnow.

Il peut être <label1>something</label1> ou <label1>oisdioadj</label> ou <label1>7</label1> ....

Toute idée?

Cordialement.

Était-ce utile?

La solution

Essayez ce qui suit:

#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;
}

Autres conseils

Mon conseil ici:. Gardez les choses simples dans votre code, il vous aidera faire les choses simples dans la tête

Il semble ce que vous voulez atteindre est plus lié à cordes, que l'étiquette.

Je vous suggère le texte de votre étiquette, puis y travailler de manière indépendante, associé puis revenir à votre étiquette:

QString text = message.text();

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

message.setText(text);

En outre, l'erreur que vous rencontrez est probablement dû au fait que vous essayez de modifier directement message.text () qui est un const Référence: vous pouvez évidemment pas modifier quelque chose qui est const.

Je crois que ce que vous essayez d'atteindre peut être fait en utilisant QString: : replace () . Vous devrez utiliser des expressions régulières pour cela, donc si vous n'êtes pas familier avec elle, il pourrait être difficile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top