Jawaban:
Cara terbaik dan yang disarankan adalah menggunakan Qt Style Sheet .
Untuk mengubah warna teks dan warna latar belakang QLabel
, inilah yang akan saya lakukan:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
Anda juga dapat menghindari penggunaan Lembar Gaya Qt dan mengubah QPalette
warna Anda QLabel
, tetapi Anda mungkin mendapatkan hasil berbeda pada platform dan / atau gaya yang berbeda.
Seperti yang dinyatakan oleh dokumentasi Qt:
Menggunakan QPalette tidak dijamin berfungsi untuk semua gaya, karena penulis gaya dibatasi oleh pedoman platform yang berbeda dan oleh mesin tema asli.
Tetapi Anda dapat melakukan sesuatu seperti ini:
QPalette palette = ui->pLabel->palette();
palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
ui->pLabel->setPalette(palette);
Tapi seperti yang saya katakan, saya sangat menyarankan untuk tidak menggunakan palet dan pergi untuk Qt Style Sheet.
color
atribut tidak efektif. Hanya melalui HTML <font color="#FFFFFF">...</font>
saya dapat mengatur warna font (menjadi putih dalam kasus ini.
color: ;
sebagai 'reset' tampaknya melakukannya, tetapi apakah ini praktik yang baik, atau apakah ada metode yang lebih baik?
Anda dapat menggunakan QPalette, namun Anda harus mengatur setAutoFillBackground(true);
untuk mengaktifkan warna latar belakang
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");
Ini berfungsi dengan baik pada Windows dan Ubuntu, saya belum bermain dengan OS lain.
Catatan: Silakan lihat QPalette , bagian peran warna untuk detail lebih lanjut
Saya menambahkan jawaban ini karena saya pikir ini bisa bermanfaat bagi siapa saja.
Saya masuk ke masalah pengaturan warna RGBA (yaitu, warna RGB dengan nilai Alpha untuk transparansi) untuk label tampilan warna dalam aplikasi lukisan saya.
Ketika saya menemukan jawaban pertama, saya tidak dapat mengatur warna RGBA. Saya juga sudah mencoba hal-hal seperti:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
di mana color
warna RGBA.
Jadi, solusi kotor saya adalah memperluas QLabel
dan mengganti paintEvent()
metode mengisi recting recting-nya.
Hari ini, saya telah membuka qt-assistant
dan membaca daftar properti referensi gaya . Untungnya, ada contoh yang menyatakan berikut ini:
QLineEdit { background-color: rgb(255, 0, 0) }
Itulah yang membuka pikiran saya dalam melakukan sesuatu seperti kode di bawah ini, sebagai contoh:
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+"); }")
Perhatikan bahwa setAutoFillBackground()
pengaturan False
tidak akan membuatnya berfungsi.
Salam,
Satu-satunya hal yang bekerja untuk saya adalah html.
Dan saya merasa ini jauh lebih mudah dilakukan daripada pendekatan programatik mana pun.
Kode berikut mengubah warna teks berdasarkan parameter yang dilewatkan oleh pemanggil.
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/>
tag (dan merupakan sesuatu yang lebih akrab bagi orang-orang HTML: D) dan bukan hanya warna karena itu memberi Anda fleksibilitas yang lebih besar.
Cara terbaik untuk mengatur fitur apa pun tentang warna widget apa pun adalah dengan menggunakan QPalette .
Dan cara termudah untuk menemukan apa yang Anda cari adalah membuka Qt Designer dan mengatur palet dari QLabel dan memeriksa kode yang dihasilkan.
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()
metode mengembalikan warna yang dipilih. Anda dapat mengubah warna label menggunakanstylesheet