Как я могу установить собственный текст для QLabel в C ++? - PullRequest
0 голосов
/ 26 мая 2020

Я работаю над симулятором 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 text.

Какой может быть простейшая реализация моего метода notify?

1 Ответ

2 голосов
/ 26 мая 2020

проблема в том, что std :: string и QString не могут быть объединены напрямую ...

трюк можно сделать:

QString mx = "<font color=%1>%2</font>";
notificationLabel->setText(mx.arg(color.c_str(), message.c_str()));
...