Câu trả lời:
Cách tốt nhất và được đề xuất là sử dụng Qt Style Sheet .
Để thay đổi màu văn bản và màu nền của a QLabel
, đây là những gì tôi sẽ làm:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
Bạn cũng có thể tránh sử dụng Qt Style Sheets và thay đổi QPalette
màu sắc của bạn QLabel
, nhưng bạn có thể nhận được kết quả khác nhau trên các nền tảng và / hoặc kiểu khác nhau.
Như tài liệu của Qt nêu:
Sử dụng QPalette không được đảm bảo để hoạt động cho tất cả các kiểu, bởi vì các tác giả kiểu được giới hạn bởi các nguyên tắc của các nền tảng khác nhau và bởi công cụ chủ đề gốc.
Nhưng bạn có thể làm một cái gì đó như thế này:
QPalette palette = ui->pLabel->palette();
palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
ui->pLabel->setPalette(palette);
Nhưng như tôi đã nói, tôi thực sự khuyên bạn không nên sử dụng bảng màu và đi cho Qt Style Sheet.
color
thuộc tính là không hiệu quả. Chỉ thông qua HTML <font color="#FFFFFF">...</font>
tôi mới có thể đặt màu phông chữ (thành màu trắng trong trường hợp này.
color: ;
như một 'thiết lập lại' dường như để làm điều đó, nhưng đây là cách thực hành tốt, hay có một phương pháp tốt hơn?
Bạn có thể sử dụng QPalette, tuy nhiên bạn phải đặt setAutoFillBackground(true);
để bật màu nền
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");
Nó hoạt động tốt trên Windows và Ubuntu, tôi chưa chơi với bất kỳ HĐH nào khác.
Lưu ý: Vui lòng xem QPalette , phần vai trò màu để biết thêm chi tiết
Tôi thêm câu trả lời này bởi vì tôi nghĩ nó có thể hữu ích cho bất kỳ ai.
Tôi bước vào vấn đề cài đặt màu RGBA (nghĩa là màu RGB có giá trị Alpha cho độ trong suốt) cho nhãn hiển thị màu trong ứng dụng vẽ của tôi.
Khi tôi bắt gặp câu trả lời đầu tiên, tôi không thể đặt màu RGBA. Tôi cũng đã thử những thứ như:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
nơi color
là một màu RGBA.
Vì vậy, giải pháp bẩn của tôi là mở rộng QLabel
và ghi đè paintEvent()
phương thức lấp đầy trực tràng giới hạn của nó.
Hôm nay, tôi đã mở qt-assistant
và đọc danh sách các thuộc tính tham chiếu kiểu . May mắn thay, nó có một ví dụ cho biết như sau:
QLineEdit { background-color: rgb(255, 0, 0) }
Đó là mở ra tâm trí của tôi trong việc làm một cái gì đó như mã dưới đây, như một ví dụ:
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+"); }")
Lưu ý rằng setAutoFillBackground()
thiết lập trong False
sẽ không làm cho nó hoạt động.
Trân trọng,
Điều duy nhất làm việc cho tôi là html.
Và tôi thấy nó dễ thực hiện hơn bất kỳ phương pháp lập trình nào.
Đoạn mã sau thay đổi màu văn bản dựa trên tham số được truyền bởi người gọi.
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/>
thẻ (và là thứ quen thuộc hơn với người HTML: D) và không chỉ là màu do đó mang lại cho bạn sự linh hoạt cao hơn.
Cách tốt nhất để đặt bất kỳ tính năng nào liên quan đến màu sắc của bất kỳ tiện ích nào là sử dụng QPalette .
Và cách dễ nhất để tìm thấy những gì bạn đang tìm kiếm là mở Qt Designer và đặt bảng màu của một nhãn hiệu và kiểm tra mã được tạo.
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()
phương thức trả về màu đã chọn. Bạn có thể thay đổi màu nhãn bằng cách sử dụngstylesheet