Вопрос

В 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?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top