QLabel: टेक्स्ट और बैकग्राउंड का रंग सेट करें


180

मैं टेक्स्ट का रंग और पृष्ठभूमि कैसे सेट करूं QLabel?

जवाबों:


272

सबसे अच्छा और अनुशंसित तरीका है क्यूटी स्टाइल शीट का उपयोग करना ।

एक का पाठ रंग और पृष्ठभूमि रंग बदलने के लिए QLabel, यहाँ मैं क्या करूँगा:

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

आप क्यूटी स्टाइल शीट्स का उपयोग करने से भी बच सकते हैं और QPaletteअपने रंग बदल सकते हैं QLabel, लेकिन आपको विभिन्न प्लेटफार्मों और / या शैलियों पर अलग-अलग परिणाम मिल सकते हैं।

क्यूटी प्रलेखन राज्यों के रूप में:

क्यूप्लेट का उपयोग करना सभी शैलियों के लिए काम करने की गारंटी नहीं है, क्योंकि शैली लेखक विभिन्न प्लेटफार्मों के दिशानिर्देशों और देशी थीम इंजन द्वारा प्रतिबंधित हैं।

लेकिन आप ऐसा कुछ कर सकते हैं:

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

लेकिन जैसा कि मैंने कहा, मैं दृढ़ता से सुझाव देता हूं कि पैलेट का उपयोग न करें और क्यूटी स्टाइल शीट के लिए जाएं।


मैं setStyleSheet () विधि का उपयोग कर रहा हूं और कम से कम Qt 4.4 में यह कॉल कनेक्ट और स्टाइल शीट सामान में समाप्त होता है और स्मृति उपयोग में वृद्धि का कारण बनता है।
डेव जोहानसेन

मैंने मेमोरी के उपयोग में वृद्धि के बारे में एक बग रिपोर्ट खोली है जो यहां पाई जा सकती है
डेव जोहान्सन

colorविशेषता अप्रभावी है। केवल HTML के माध्यम से <font color="#FFFFFF">...</font>मैं फ़ॉन्ट रंग सेट करने में सक्षम था (इस मामले में सफेद करने के लिए।
पाउलो कार्वाल्हो

क्या उपयोगकर्ता के डेस्कटॉप के डिफ़ॉल्ट (पाठ) रंग को निर्दिष्ट करने का एक तरीका है? color: ;एक 'रीसेट' के रूप में उपयोग करना ऐसा लगता है, लेकिन क्या यह अच्छा अभ्यास है, या कोई बेहतर तरीका है?
एस्ट्रोफ्लोयड

38

आप 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");

यह विंडोज और उबंटू पर ठीक काम करता है, मैंने किसी अन्य ओएस के साथ नहीं खेला है।

नोट: कृपया अधिक विवरण के लिए QPalette , color role अनुभाग देखें


यह किसी भी दृष्टिकोण का सबसे महत्वपूर्ण एकल तत्व है (स्टाइलशीट्स को छोड़कर।)
एलियाहू

3
यह इंगित करने के लिए धन्यवाद कि ऑटफ़िलबैक ग्राउंड एक महत्वपूर्ण मुद्दा है। ऊपर दिया गया स्वीकृत उत्तर उस सेटिंग के बिना काम नहीं करता है।
बीएसडी

20

मैं इस जवाब को जोड़ता हूं क्योंकि मुझे लगता है कि यह किसी के लिए भी उपयोगी हो सकता है।

मैं अपने पेंटिंग एप्लीकेशन में कलर डिस्प्ले लेबल्स के लिए RGBA कलर्स (यानी RGB वैल्यू विथ ट्रांसपेरेंसी) की समस्या में कदम रखता हूं।

जैसा कि मैं पहले उत्तर में आया था, मैं RGBA रंग सेट करने में असमर्थ था। मैंने भी कोशिश की है जैसे:

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

जहां colorआरजीबीए रंग है।

इसलिए, मेरा गंदा समाधान इसकी सीमा को भरने वाली विधि को विस्तारित करने 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गया काम नहीं करेगा।

सादर,


14

केवल एक चीज जो मेरे लिए काम करती थी वह थी 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);
}

यहाँ भी, न तो क्यूप्लेट और न ही शैलियों ने मेरे लिए काम किया, बहुत कष्टप्रद!
मैं कुछ नहीं जानता

मैं इस तरह से पसंद करता हूं क्योंकि यह आपको <font/>टैग के अंदर कुछ अन्य फैंसी सामान रखने की अनुमति देता है (और HTML लोगों के लिए कुछ और परिचित है: डी) और न केवल एक रंग इसलिए यह आपको अधिक लचीलापन देता है।
rbaleksandar

@iknown सुखद स्टाइलशीट QPalette के माध्यम से काम करती है ... सब कुछ QPalette का उपयोग करती है।
विक्टर पोलेवॉय

13

किसी भी विजेट के रंगों के बारे में किसी भी सुविधा को सेट करने का सबसे अच्छा तरीका है कि QPalette का उपयोग करें

और जो आप ढूंढ रहे हैं उसे ढूंढने का सबसे आसान तरीका है क्यूटी डिज़ाइनर को खोलना और क्यूबेल का पैलेट सेट करना और जेनरेट किए गए कोड को चेक करना।


2
डिज़ाइनर में, उत्पन्न कोड देखने के लिए "फ़ॉर्म-> कोड देखें" पर क्लिक करें।
अलिसामी

6

यह एक सही काम कर रहा है

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


1
हालांकि कोड की सराहना की जाती है, लेकिन इसका हमेशा साथ होना चाहिए। यह लंबा होना जरूरी नहीं है, लेकिन यह अपेक्षित है।
पीटर - मोनिका

जब यह कोड काम करता है, तो कुछ निश्चित अनुकूलन होते हैं <code> QColor color = QColorDialog :: getColor (क्यूकोलर (Qt :: white), यह, tr ("रंग चुनें"); // रंग का चयन करने के लिए स्थैतिक फ़ंक्शन का उपयोग करें; आरंभिक मूल्य सफेद है Ibr> ui-> लेबल-> setStyleSheet (QString ("QLabel {पृष्ठभूमि-रंग:% 1; रंग: नीला;}" "+ कोलकोड +"; रंग: नीला;};}) .arg ( color.name ()); // color.name रिटर्न एक #RRGGBB स्वरूपित स्ट्रिंग </ code>
स्कॉट एरन ब्लूम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.