سؤال

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

اي فكرة؟

يعتبر.

هل كانت مفيدة؟

المحلول

حاول القيام بما يلي:

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

أعتقد أن ما تحاول تحقيقه يمكن القيام به QString :: Replay (). سيكون عليك استخدام تعبيرات منتظمة لذلك ، لذلك إذا لم تكن على دراية بذلك ، فقد يكون الأمر صعبًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top