Qt - рисовать внутри QScrollArea в QDialog
-
23-12-2019 - |
Вопрос
В 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
?
Решение
Рисование в QScrollArea - это тоже не то, что вы хотите, потому что QScrollArea на самом деле имеет виджет viewport.
Создайте другой класс, который наследует 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 до размера круга, который вы хотите нарисовать.