2014-01-18 2 views
0

QPushButton 위젯을 상속받은 클래스가 있습니다. 그 버튼의 커스텀 룩을 가지고 싶기 때문에 paintEvent 메소드를 오버라이드 (override)했다. 내가 칠하고 싶은 모든 버튼은 QFrame 객체의 자손입니다.QWidget에 대한 QT paintEvent

거기에 문제가 있습니다. 나는 그 물체들을 다시 채울 수 없다.

내 paintEvent 기능 :

void Machine::paintEvent(QPaintEvent*) { 
    QPainter painter(this); 
    QRect geo = this->geometry(); 

    int x, y, width, height; 

    x = geo.x()-10; 
    y = geo.y()-10; 
    width = geo.width()-3; 
    height = geo.height()-5; 

    painter.fillRect(x, y, width, height, QColor(220,220,220)); 

    painter.drawText(x+10, y+10, "Machine " + QString::number(id)); 
} 

위젯은 QFrame의 왼쪽 상단 모서리에, 원하는 효과는 괜찮습니다. 그러나 버튼을 다른 곳으로 옮기면 위젯이 사라지기 시작합니다. 이미지에 당신은 세드릭 볼 수 있습니다

enter image description here

버튼은 왼쪽-일부 픽셀을 이동 만됩니다. 왜 이런 식으로 작동합니까? 해당 버튼의 컨테이너 인 QFrame은 충분히 크다. 미리

감사)

+0

moveEvent를 다시 구현하고 거기에서 update를 호출하면 어떻게됩니까? – koplersky

답변

4

이유 됨 좌표계된다 geometry 방법은 부모 상대적 위치를 반환하지만 QPainter::drawRect 로컬 좌표 사각형을 받아 들인다. 이 코드를 사용해보십시오 :

void Machine::paintEvent(QPaintEvent*) { 
    QPainter painter(this); 

    int width = size().width() - 3; 
    int height = size().height() - 5; 

    painter.fillRect(0, 0, width, height, QColor(220,220,220)); 
    painter.drawText(10, 10, "Machine " + QString::number(id)); 
} 
관련 문제