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);
それを行う別の方法です。しかし、私の場合、ラベルの間の部分は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 ::交換(). 。そのために正規表現を使用する必要があるので、あなたがそれに慣れていないなら、それは難しいかもしれません。