Qt - QDialog의 QScrollArea 내부에 그리기
-
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에 실제로 뷰포트 위젯이 있기 때문에 원하는 것이 아닙니다.
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 인스턴스의 크기를 그리려는 원의 크기로 조정해야 합니다.
제휴하지 않습니다 StackOverflow