質問

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をドラッグし、スクロールバーが自動的に追加されるようにそれを描画することにします。QScrollAreaui->scrollAreaを使用してアクセスできます。

QPainter painter(ui->scrollArea);を設定して上記のコードを変更しました。ただし、NothingsはQScrollAreaに表示されます。paintEventQScrollAreaをオーバーライドする必要があることを読みました。しかし、私はこれを行う方法がわかりません。

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