ฉันจะตั้งค่าสีของข้อความและพื้นหลังของ a ได้QLabel
อย่างไร?
ฉันจะตั้งค่าสีของข้อความและพื้นหลังของ a ได้QLabel
อย่างไร?
คำตอบ:
วิธีที่ดีที่สุดและแนะนำคือการใช้Qt Style Sheet
หากต้องการเปลี่ยนสีข้อความและสีพื้นหลังของ a 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
color
แอตทริบิวต์ไม่ได้ผล ผ่าน HTML เท่านั้น<font color="#FFFFFF">...</font>
ฉันสามารถตั้งค่าสีตัวอักษร (เป็นสีขาวได้ในกรณีนี้
color: ;
เป็น 'รีเซ็ต' ดูเหมือนว่าจะทำ แต่วิธีนี้เป็นการปฏิบัติที่ดีหรือมีวิธีที่ดีกว่า
คุณสามารถใช้ 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()
วิธีการกรอก rect ขอบเขตของมัน
วันนี้ผมได้เปิด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);
}
<font/>
แท็ก (และเป็นสิ่งที่คุ้นเคยกับคน HTML: D) และไม่ใช่แค่สีดังนั้นมันจึงให้ความยืดหยุ่นมากขึ้น
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