Frage

In Qt5, ich habe eine QDialog Fenster, auf dem ich einen Kreis wie folgt gezeichnet habe:

void MyDialog::paintEvent(QPaintEvent *pe)
{
       QPainter painter(this);
       painter.setRenderHint(QPainter::Antialiasing,true);
       QPen pen(Qt::blue,2);
       painter.setPen(pen);
       QRect r=QRect(0,0,100,100);
       painter.drawEllipse(r);
}

Wenn ich einen größeren Kreis zeichne, zum Beispiel mit QRect(0,0,500,500);, der Kreis, der größer als das Dialogfenster ist, wird abgeschnitten.Also habe ich eine gezogen QScrollArea auf das Dialogfenster und entscheiden Sie sich, darauf zu zeichnen, damit automatisch Bildlaufleisten hinzugefügt werden.Der QScrollArea kann über darauf zugegriffen werden ui->scrollArea.

Ich habe den obigen Code durch Einstellung geändert QPainter painter(ui->scrollArea);.Es erscheint jedoch nichts in der QScrollArea.Ich habe gelesen, dass ich das überschreiben muss paintEvent von QScrollArea.Aber ich weiß nicht, wie ich das machen soll.

Irgendeine Hilfe beim Zeichnen QScrollArea?

War es hilfreich?

Lösung

Das Zeichnen auf der QScrollArea ist auch nicht das, was Sie wollen, da die QScrollArea tatsächlich über ein Ansichtsfenster-Widget verfügt.

Erstellen Sie eine weitere Klasse, die QWidget erbt.Überschreiben Sie die Methode paintEvent() und das von Ihnen erwähnte Gemälde.Fügen Sie dann das Widget zum Bildlaufbereich in Ihrem Dialog hinzu.

MyDialog::MyDialog()
{
  QScrollArea *pScrl = new QScrollArea(this);
  pScrl->setWidget(new MyWidget(pScrl));
  ... // use a layout to put the scroll area in the dialog
}

Damit es wirklich nützlich ist, müssen Sie die Größe der MyWidget-Instanz an die Größe des Kreises anpassen, den Sie zeichnen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top