Properrr
@Properrr

Почему не переносит \n в QLabel на новую строку?

Вот метод который устанавливает текст в QLabel. В строках содержится "\n". Его я заменяю на "
" для переноса на новую строку...

RegExp не находит "\n", но они там явно есть.

void setText(const std::string &text)
        {
            QString string(mTextCodec->toUnicode(text.c_str()));
            string.replace(QRegExp("\\n"), QString("<br\>"));
            mLabel.setText(string);
         }


А если пишу так, то работает:
void setText(const std::string &text)
        {
            QString string("<i>I want to be able to switch it</i>\n<i>back if it doesn't fit.</i>");
            string.replace(QRegExp("\\n"), QString("<br\>"));
            mLabel.setText(string);
         }


Я так подозреваю что проблема может быть с кодировкой. какие требования или как мне всё привести в unicode что бы можно было нормально заменить \n на
?
А может вообще и заменять не надо и можно используя "\n" заставить QLabel делать переносы текста на новую строку?
  • Вопрос задан
  • 6193 просмотра
Решения вопроса 1
Properrr
@Properrr Автор вопроса
Нужно было сделать 2е экранирование:
1)Экранирование Сишное.
2)Экранирование в RegExp.
Правильный вариант:
string.replace(QRegExp("\\\\n"), QString("<br\>"));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
RegExp не находит "\n", но они там явно есть.
...
string.replace(QRegExp("\\n"), QString("<br\>"));

\n -- это два символа только в исходном коде, в исполняемом коде это один символ (с кодом 10).
\\n -- это три символа в исходном коде и два -- \n в исполняемом.

А может вообще и заменять не надо и можно используя "\n" заставить QLabel делать переносы текста на новую строку?

В мануале по QLabel есть такой пример:
QLabel *label = new QLabel(this);
 label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
 label->setText("first line\nsecond line");
 label->setAlignment(Qt::AlignBottom | Qt::AlignRight);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы