Pergunta

No Qt5, 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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top