Qt - рисовать внутри QScrollArea в QDialog
В Qt
5, у меня есть 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 до размера круга, который вы хотите нарисовать.