QT paintEvent für ein QWidget
Ich habe eine Klasse, die erbt QPushButton-widget. Ich möchte ein benutzerdefinierte Aussehen der button, so habe ich overrided paintEvent-Methode. Alle Tasten, die ich malen will, sind childs von QFrame-Objekt.
Und da habe ich ein problem. Ich kann nicht streichen, diese Objekte.
Meine paintEvent-Funktion:
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));
}
Wenn ein widget in der linken oberen Ecke von QFrame, gewünschte Effekt ist ok. Aber wenn ich move-Taste woanders, widget zu verschwinden beginnt. Auf den Bildern können Sie sehen, was Los ist:
Schaltfläche ist nur verschoben, einige px nach unten-Links. Warum funktioniert es so? QFrame ist ein container für diesen button ist groß genug.
Vielen Dank im Voraus 😉
- Was ist, wenn Sie implementieren moveEvent und update aufrufen, von dort?
InformationsquelleAutor marxin | 2014-01-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund ist im Koordinatensystem:
geometry
- Methode gibt die position relativ zum übergeordneten, aberQPainter::drawRect
akzeptiert Rechteck in lokalen Koordinaten. Versuchen Sie, diesen code: