1. 程式人生 > >Qt 中 QLabel 自定義文字的顏色狀態,設定為三種狀態(類似於Qcheckbutton裡面的checked unchecked)

Qt 中 QLabel 自定義文字的顏色狀態,設定為三種狀態(類似於Qcheckbutton裡面的checked unchecked)

1  自定義設定Qlabel文字顏色狀態。 別的類可以進行類推

#ifndef QCOMPLEXLABEL_H
#define QCOMPLEXLABEL_H

#include <QObject>
#include <QWidget>
#include <QLabel>

class QComplexLabel : public QLabel
{
    Q_OBJECT

    Q_PROPERTY(QColor normalColor READ normalColor WRITE setNormalColor)
    Q_PROPERTY(QColor errorColor READ errorColor WRITE setErrorColor)
    Q_PROPERTY(QColor unknownColor READ unknownColor WRITE setUnknownColor)

public:
    QComplexLabel(QWidget *parent = 0);

    enum LabelState{
        Normal = 0x00,
        Error = 0x01,
        Unknown = 0x02
    };

    void setNormalColor(const QColor  &newColor) { m_normalColor = newColor; }
    QColor normalColor() const { return m_normalColor; }

    void setErrorColor(const QColor  &newColor) { m_errorColor = newColor; }
    QColor errorColor() const { return m_errorColor; }

    void setUnknownColor(const QColor  &newColor) { m_unknownColor = newColor; }
    QColor unknownColor() const { return m_unknownColor; }

    void setLabelState(LabelState state) {
        m_labelState = state;
        QColor color = m_normalColor;

        switch (m_labelState) {
        case Normal:
            color = m_normalColor;
            break;
        case Error:
            color = m_errorColor;
            break;
        case Unknown:
            color = m_unknownColor;
            break;
        default:
            color = m_normalColor;
            break;
        }

        QString qss = "color:rgb(" + QString::number(color.red()) + "," + QString::number(color.green()) + "," + QString::number(color.blue()) +");";
        setStyleSheet(qss);
    }

private:
    LabelState m_labelState;
    QColor m_normalColor;
    QColor m_errorColor;
    QColor m_unknownColor;

};

#endif // QCOMPLEXLABEL_H
2   qss 的設定  
QComplexLabel {
    color : rgb(199,99,99);
    qproperty-normalColor:rgb(0,0,0);
    qproperty-errorColor:rgb(255,0,0);
    qproperty-unknownColor:rgb(192,192,192);
}
3   選擇合適的位置進行讀取qss(例如 main.cpp 中
    QFile styleSheet(QString(":/image/qss"));
    styleSheet.open(QIODevice::ReadOnly);
    a.setStyleSheet(styleSheet.readAll());
    styleSheet.close();


4  設定qlabel的顏色狀態,需要使用的地方呼叫下面的語句就可以用了。

ui->label->setLabelState(QComplexLabel::Normal); //這樣就可以使用自定義的QLabel的狀態 (Normal  Error   Unknown)