Qt - рисовать внутри QScrollArea в QDialog

В Qt5, у меня есть QDialog Окно, на котором я нарисовал круг следующим образом:

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);
}

Если я нарисую больший круг, например, с помощью QRect(0,0,500,500);круг больше окна диалога обрезается. Поэтому я притащил QScrollArea в диалоговом окне и решите нарисовать его так, чтобы полосы прокрутки добавлялись автоматически. QScrollArea можно получить с помощью ui->scrollArea,

Я изменил вышеуказанный код, установив QPainter painter(ui->scrollArea);, Тем не менее, ничто не появляется в QScrollArea, Я прочитал, что мне нужно переопределить paintEvent из QScrollArea, Но я не знаю, как это сделать.

Любая помощь рисования на QScrollArea?

1 ответ

Решение

Рисование в QScrollArea - это не то, что вам нужно, потому что QScrollArea действительно имеет виджет видового экрана.

Создайте другой класс, который наследует QWidget. Переопределите метод paintEvent() и для упомянутой вами картины. Затем добавьте виджет в область прокрутки в вашем диалоге.

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

Чтобы сделать его действительно полезным, вам нужно изменить размер экземпляра MyWidget до размера круга, который вы хотите нарисовать.

Другие вопросы по тегам