2016-05-15 16 views
0

Ich habe ein Problem mit der Aktualisierung der Zeichnung. Ich habe 2 Dateien: mainwindow.cpp und drawwidget.cpp. Im Hauptfenster lade ich eine Datei mit x, y Punkt Parametern. Wenn ich auf eine Schaltfläche klicke, wähle ich einige davon aus und übergebe sie an drawwidget, um diese Punkte zu zeichnen.QPainter Daten aktualisieren

Um zu sehen, wie es funktioniert, zeichne ich vorübergehend eine Ellipse und ich multipliziere "p" mal Größe. Wenn ich auf eine Schaltfläche klicke, ändert "p" den Wert (ich habe es in QMessageBox und seinem anderen Wert gedruckt), aber die Ellipse hat immer noch dieselbe Größe. Was ich falsch mache?

DrawWidget::DrawWidget(QWidget *parent) : 
    QWidget(parent) 
{ 
    p=30; 
} 
void DrawWidget::paintEvent(QPaintEvent *) 
{ 
    QStyleOption opt; 
    opt.init(this); 
    QPainter painter(this); 
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); 
    painter.setRenderHint(QPainter::Antialiasing); 
    paint(painter); 
} 
void DrawWidget::paint(QPainter &painter) 
{ 
    painter.drawEllipse(QRect(1*p-5, 5*p-5, 10, 10)); 
} 
void DrawWidget::handleData(sPunkt *&Tab_pkt) 
{ 
    p=Array[0].x; 
    update(); 
} 
+0

Nun die letzten zwei Parameter [ 'QRect :: QRect (int, int, int, int)'] (http://doc.qt.io/qt -5/qrect.html # QRect-3) sind Breite und Höhe, das sind Konstanten in Ihrem Code ('10'). Also sollte sich die Größe nicht ändern. Sie ändern nur die Position. – thuga

+0

Ja, meine Schuld, aber ich schrieb es, um zu sehen, ob sich irgendetwas ändert und nichts passiert, wenn ich den p Wert – kubizen

+0

OK ändere, dann überprüfe den Wert von 'p' in der' paint' Methode. Drucken Sie eine 'QDebug' Nachricht oder etwas. – thuga

Antwort

0

Sie benötigen eine Widget, um update()QPaintEvent auszulösen und folgenden Aufruf paintEvent().

Ein Paint-Ereignis ist eine Anforderung, ein Widget ganz oder teilweise neu zu streichen. Es kann für eine der folgenden Gründe haben:

  • repaint() oder Update() aufgerufen wurde,
  • das Widget verdeckt war und jetzt entdeckt wurde, oder
  • viele andere Gründe.

Siehe docs: QWidget::paintEvent()

+0

Ich habe es hier aktualisiert: 'void DrawWidget :: handleData (sPunkt * & Tab_pkt) { p = Array [0] .x; Aktualisierung(); } ', aber es funktioniert nicht. – kubizen