Как мога да задам персонализиран текст на QLabel в C++?

Работя върху симулатор на C++/Qt, който интегрира страница на параметър. В края на параметрите QLabel уведомява потребителя дали въведените данни са валидни или не. Този текст трябва да се появи с персонализиран цвят, така че внедрих това:

ParametersDialog.h

#include <iostream>
#include <QtWidgets>

using namespace std;

class ParametersDialog: public QDialog {
    Q_OBJECT

    public:
        ParametersDialog(QWidget *parent = nullptr);
        ~ParametersDialog();

    ...

    private:
        QLabel *notificationLabel = new QLabel;
        ...
        void notify(string message, string color);
};

ParametersDialog.cpp

#include "<<src_path>>/ParametersDialog.h"

ParametersDialog::ParametersDialog(QWidget *parent): QDialog(parent) {
    ...
    notify("TEST TEST 1 2 1 2", "green");
}

...

void ParametersDialog::notify(string message, string color = "red") {
    notificationLabel->setText("<font color=" + color + ">" + message + "</font>");
}

Не разбирам защо ми дава тази грешка:

D:\dev\_MyCode\SM_Streamer\<<src_path>>\ParametersDialog.cpp:65:79: error: no matching function for call to 'QLabel::setText(std::__cxx11::basic_string<char>)'
  notificationLabel->setText("<font color=" + color + ">" + message + "</font>");
                                                                               ^

Разбирам, че моята конкатенация на низ е създала basic_string<char> елемент, който не може да бъде зададен като QLabel текст.

Каква може да бъде най-простата реализация на моя notify метод?


person 0009laH    schedule 26.05.2020    source източник
comment
basic_string<char> е просто std::string, но методът взема QString   -  person 463035818_is_not_a_number    schedule 26.05.2020
comment
Опитах това решение, но ми дава подобна грешка: notificationLabel->setText(QString("<font color=" + color + ">" + message + "</font>"));   -  person 0009laH    schedule 26.05.2020
comment
Това отговаря ли на въпроса ви? stackoverflow.com/questions/1814189/   -  person 463035818_is_not_a_number    schedule 26.05.2020
comment
Да, работи, забравих, че QString не може да се изгради като мен :) Благодаря ви много   -  person 0009laH    schedule 26.05.2020


Отговори (1)


проблемът е, че std::string и QString не могат да се свързват директно...

може да се направи трик:

QString mx = "<font color=%1>%2</font>";
notificationLabel->setText(mx.arg(color.c_str(), message.c_str()));
person ΦXocę 웃 Пepeúpa ツ    schedule 26.05.2020