문제

~ 안에 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에 실제로 뷰포트 위젯이 있기 때문에 원하는 것이 아닙니다.

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