QLabel : 텍스트 및 배경색 설정


180

텍스트의 색상과 배경을 어떻게 설정 QLabel합니까?

답변:


272

가장 권장되는 방법은 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 스타일 시트를 사용하는 것이 좋습니다.


나는 setStyleSheet () 메소드를 사용하고 있으며 적어도 Qt 4.4에서는 connect와 Style Sheet를 호출하여 메모리 사용을 증가시킵니다.
Dave Johansen

나는 여기 에서 찾을 수있는 증가 된 메모리 사용량에 대한 버그 보고서를 열었다 .
Dave Johansen

color속성은 비효율적이다. HTML 만 통해 <font color="#FFFFFF">...</font>. 나는이 경우 흰색에 글꼴 색상을 (설정 할 수 있었다
파울로 카르발류

사용자 데스크탑의 기본 (텍스트) 색상을 지정하는 방법이 있습니까? color: ;'재설정'으로 사용 하는 것처럼 보이지만이 좋은 방법입니까, 아니면 더 좋은 방법이 있습니까?
AstroFloyd

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

그것은 Windows와 Ubuntu에서 잘 작동하며 다른 OS와 함께 연주하지 않았습니다.

참고 : 자세한 내용은 색상 역할 섹션 인 QPalette 를 참조하십시오.


이것은 모든 접근 방식의 가장 중요한 단일 요소입니다 (styleSheets 제외)
Eliyahu Skoczylas

3
autoFillBackground가 여기서 중요한 문제임을 지적 해 주셔서 감사합니다. 위의 답변은 해당 설정이 없으면 작동하지 않습니다.
BSD

20

나는 누군가에게 유용 할 수 있다고 생각하기 때문에이 대답을 추가합니다.

페인팅 응용 프로그램의 컬러 디스플레이 레이블에 RGBA 색상 (투명도에 대한 알파 값을 가진 RGB 색상) 을 설정하는 문제를 겪습니다 .

첫 번째 답변을 보았을 때 RGBA 색상을 설정할 수 없었습니다. 나는 또한 다음과 같은 것을 시도했다.

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

colorRGBA 색상은 어디에 있습니까 ?

그래서 내 더러운 해결책은 경계 수정을 채우는 방법 을 확장 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);
}

여기서도 QPalette 나 스타일 시트가 저에게 도움이되지 않았습니다.
나는 아무것도 모른다

<font/>태그 뿐만 아니라 다른 멋진 것들을 태그 안에 넣을 수 있기 때문에이 방법을 선호합니다 (HTML 사람들에게 더 친숙합니다 : D). 따라서 더 큰 유연성을 제공합니다.
rbaleksandar

@iknownothing 스타일 시트는 QPalette를 통해 작동합니다. 모든 것이 QPalette를 사용합니다.
Victor Polevoy

13

위젯의 색상과 관련된 기능을 설정하는 가장 좋은 방법은 QPalette 를 사용하는 입니다.

그리고 당신이 찾고있는 것을 찾는 가장 쉬운 방법은 Qt Designer를 열고 QLabel의 팔레트를 설정하고 생성 된 코드를 확인하는 것입니다.


2
디자이너에서 "양식-> 코드보기"를 클릭하여 생성 된 코드를보십시오.
alisami

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
코드는 이해되지만 항상 함께 설명해야합니다. 오래 걸리지는 않지만 예상됩니다.
peterh-Reinstate Monica

이 코드가 작동하는 동안 몇 가지 명확한 최적화가 있습니다 <code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), this, tr ( "Select Color"); // 정적 함수를 사용하여 색상을 선택합니다. 초기 값은 흰색입니다. </br> ui-> label-> setStyleSheet (QString ( "QLabel {background-color : % 1; color : blue;}" "+ colcode +"; color : blue;} ") .arg ( color.name ()); // color.name은 #RRGGBB 형식 문자열을 반환합니다 </ code>
Scott Aron Bloom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.