2014-07-10 1 views
3

나는 선을 그 으려고 노력하고있다.QPainter. Draw line

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    QPainter painter(&w); 
    painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap)); 
    painter.drawLine(0, 0, 200, 200); 

    return a.exec(); 
} 

하지만 창에는 그림이 없습니다. 뭐가 잘못 되었 니?

답변

8

적어도 Windows 및 Mac OS에서는 paintEvent() 함수 외부로 칠할 수 없습니다. 그러나 MainWindow 클래스 'paintEvent() 함수를 재정의하여 거기에 선을 그릴 수 있습니다.

class Widget : public QWidget 
{ 
protected: 
    void paintEvent(QPaintEvent *event) 
    { 
     QPainter painter(this); 
     painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap)); 
     painter.drawLine(0, 0, 200, 200); 
    } 
}; 

그리고 사용 : 예를 들어

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    Widget w; 
    w.show(); 
    [..] 
0

위젯은 각각의 페인트 이벤트에서만 칠할 수 있습니다. 모든 함수에서 픽스맵을 그릴 수 있지만 결과를 위젯 페인트 이벤트에 표시해야합니다. 다큐먼트에서

:

경고 : paintdevice는 위젯되면 QPainter를 단지 paintEvent() 함수 내부 또는 paintEvent()를 호출하는 기능에 사용될 수있다; Qt :: WA_PaintOutsidePaintEvent 위젯 속성이 설정되어 있지 않은 경우입니다.

7

당신은 페인트 이벤트의 외부 위젯에 페인트 수 없습니다. 하지만 QImage, QPixmap 또는 QPicture과 같이 비 위젯에서는 언제든지 페인트 할 수 있습니다. 따라서이 작동합니다

enter image description here

#include <QApplication> 
#include <QLabel> 
#include <QPicture> 
#include <QPainter> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QLabel l; 
    QPicture pi; 
    QPainter p(&pi); 

    p.setRenderHint(QPainter::Antialiasing); 
    p.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap)); 
    p.drawLine(0, 0, 200, 200); 
    p.end(); // Don't forget this line! 

    l.setPicture(pi); 
    l.show(); 
    return a.exec(); 
}