سؤال

كيف يمكنني ضبط لون النص وخلفية أ QLabel ?

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

المحلول

أفضل طريقة موصى بها هي الاستخدام ورقة QT.

لتغيير لون النص ولون الخلفية من أ QLabel, ، هذا ما سأفعله:

QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");

يمكنك أيضًا تجنب استخدام أوراق نمط QT وتغيير QPalette ألوانك QLabel, ، ولكن قد تحصل على نتائج مختلفة على منصات و/أو أنماط مختلفة.

كما تنص وثائق QT:

إن استخدام QPalette ليس مضمونًا للعمل في جميع الأنماط ، لأن مؤلفي الأنماط مقيد بإرشادات منصات مختلفة ومحرك الموضوع الأصلي.

لكن يمكنك أن تفعل شيئًا كهذا:

 QPalette palette = ui->pLabel->palette();
 palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
 palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
 ui->pLabel->setPalette(palette);

لكن كما قلت ، أقترح بشدة عدم استخدام اللوحة والذهاب إلى ورقة أنماط QT.

نصائح أخرى

يمكنك استخدام Qpalette ، ولكن يجب تعيينك setAutoFillBackground(true); لتمكين لون الخلفية

QPalette sample_palette;
sample_palette.setColor(QPalette::Window, Qt::white);
sample_palette.setColor(QPalette::WindowText, Qt::blue);

sample_label->setAutoFillBackground(true);
sample_label->setPalette(sample_palette);
sample_label->setText("What ever text");

إنه يعمل بشكل جيد على Windows و Ubuntu ، لم ألعب مع أي نظام تشغيل آخر.

ملاحظة: يرجى الاطلاع qpalette, ، قسم دور اللون لمزيد من التفاصيل

أضيف هذه الإجابة لأنني أعتقد أنه قد يكون مفيدًا لأي شخص.

أخطو في مشكلة الإعداد RGBA الألوان (أي لون RGB مع قيمة ألفا للشفافية) لتسميات عرض الألوان في تطبيق الطلاء الخاص بي.

عندما صادفت الإجابة الأولى ، لم أتمكن من تعيين لون RGBA. لقد جربت أشياء مثل:

myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())

أين color هو لون RGBA.

لذلك ، كان الحل القذر هو تمديد QLabel والتجاوز paintEvent() طريقة ملء المستقيم المحيط.

اليوم ، لقد فتحت qt-assistant وقراءة قائمة الخصائص المرجعية النمط. في الإثارة ، لديه مثال ينص على ما يلي:

QLineEdit { background-color: rgb(255, 0, 0) }

هذا يفتح ذهني في فعل شيء مثل الكود أدناه ، كمثال:

myLabel= QLabel()
myLabel.setAutoFillBackground(True) # This is important!!
color  = QtGui.QColor(233, 10, 150)
alpha  = 140
values = "{r}, {g}, {b}, {a}".format(r = color.red(),
                                     g = color.green(),
                                     b = color.blue(),
                                     a = alpha
                                     )
myLabel.setStyleSheet("QLabel { background-color: rgba("+values+"); }")

لاحظ أن setAutoFillBackground() اجلس هنا False لن تجعلها تعمل.

يعتبر،

الشيء الوحيد الذي نجح بالنسبة لي هو HTML.

ووجدت أنه من الأسهل بكثير القيام به من أي من الأساليب البرنامجية.

يغير الرمز التالي لون النص بناءً على معلمة تم تمريرها بواسطة المتصل.

enum {msg_info, msg_notify, msg_alert};
:
:
void bits::sendMessage(QString& line, int level)
{
    QTextCursor cursor = ui->messages->textCursor();
    QString alertHtml  = "<font color=\"DeepPink\">";
    QString notifyHtml = "<font color=\"Lime\">";
    QString infoHtml   = "<font color=\"Aqua\">";
    QString endHtml    = "</font><br>";

    switch(level)
    {
        case msg_alert:  line = alertHtml % line; break;
        case msg_notify: line = notifyHtml % line; break;
        case msg_info:   line = infoHtml % line; break;
        default:         line = infoHtml % line; break;
    }

    line = line % endHtml;
    ui->messages->insertHtml(line);
    cursor.movePosition(QTextCursor::End);
    ui->messages->setTextCursor(cursor);
}

أفضل طريقة لتعيين أي ميزة فيما يتعلق بألوان أي عنصر واجهة مستخدم هي الاستخدام qpalette.

وأسهل طريقة للعثور على ما تبحث عنه هي فتح مصمم QT وتعيين لوحة Qlabel والتحقق من الكود الذي تم إنشاؤه.

هذا واحد يعمل بشكل مثالي

QColorDialog *dialog = new QColorDialog(this);
QColor color=  dialog->getColor();
QVariant variant= color;
QString colcode = variant.toString();
ui->label->setStyleSheet("QLabel { background-color :"+colcode+" ; color : blue; }");

getColor() الطريقة إرجاع اللون المحدد. يمكنك تغيير لون التسمية باستخدام stylesheet

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