Qt - desenhar dentro de QScrollArea em um QDialog
-
23-12-2019 - |
Pergunta
No Qt
5, eu tenho um QDialog
janela em que eu desenhei um círculo da seguinte forma:
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);
}
Se eu desenhar um círculo maior, por exemplo, utilizando QRect(0,0,500,500);
, o círculo maior do que a janela de diálogo é cortado.Então eu arrastei uma QScrollArea
na janela de diálogo e decidir empate para que para que as barras de rolagem são adicionados automaticamente.O QScrollArea
pode ser acessado utilizando ui->scrollArea
.
Eu mudei o código acima por definição QPainter painter(ui->scrollArea);
.No entanto, nada aparece na QScrollArea
.Eu li que eu precisa para substituir o paintEvent
de QScrollArea
.Mas eu não sei como fazer isso.
Qualquer ajuda do desenho sobre o QScrollArea
?
Solução
Desenho no QScrollArea não é o que você quer ou porque o QScrollArea, na verdade, tem um visor widget.
Criar outra classe que herda QWidget.Substituir o paintEvent() método e para a pintura que você menciona.Em seguida, adicione o widget para a área de rolagem na caixa de diálogo.
MyDialog::MyDialog()
{
QScrollArea *pScrl = new QScrollArea(this);
pScrl->setWidget(new MyWidget(pScrl));
... // use a layout to put the scroll area in the dialog
}
Para realmente torná-lo útil será necessário redimensionar o MyWidget instância para o tamanho do círculo que você deseja desenhar.