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);

また、あなたが抱えているエラーは、const参照である message.text() を直接変更しようとしていることが原因である可能性がありconstます。

あなたが達成しようとしていることは、QString::replace()を使用して実行できると思います。そのためには正規表現を使用する必要があるため、慣れていないと難しいかもしれません。

于 2010-08-26T12:26:43.290 に答える