ボタンが押されたときにイベントを作成したいと思います。プログラムは、画像内でマウス ポインターを使用してフリーハンドの線を描画できるようにする必要があります。現在、タブウィンドウに写真のアルバムを表示できる段階にあります。ガイドラインや手がかりを提供することで、誰かがそれを助けることができますか???
3 に答える
あなたの質問はかなり広いです、私は恐れています。他の人が同じ問題をどのように解決したかを調べて、あなたが達成したいことについて調査することをお勧めします。特定の質問に答えるためのリソースとしてSOをさらに使用することで、SOを最大限に活用できます。
そうは言っても、ここにあなたが見ることができるいくつかのことがあります:
QGraphicsScene
:多数の2Dグラフィックスオブジェクト(つまり、ユーザーが描画できる線)を含むことができるサーフェス
QGraphicsSceneMouseEvent
:マウスからシーンに入力を取得するためにキャッチして処理する必要のあるイベント。このイベントを処理するには、のサブクラスを作成して再実装するか、シーンにQGraphicsScene
eventFilterをインストールします。QGraphicsScene::mouseMoveEvent
単純な QWidget (QGraphicsScene のような複雑なものではない) を使用して画像を表示している場合は、QWidget::mouseMoveEvent(QMouseEvent *e)
. ユーザーがマウス ボタン ( e->buttons() != 0
) を押すと、画像内で絵を描くことができます。
メンバに自分の写真がありQImage img
、 で前のカーソル位置を追跡するとしますQPoint cursorLast
。また、プロパティに画像を設定できる QLabel のようなものを使用して画像を表示すると仮定しましょう。次に、次のように描画できます。
void MyWidget::mouseMoveEvent(QMouseEvent *e) {
if(e->buttons()) {
if(!cursorLast.isNull()) {
QPainter p(&img); // and set pen
p.drawLine(cursorLast, e->pos());
p.end();
setImage(img); // update image in your view
}
cursorLast = e->pos();
}
}
cursorLast
マウスが離されたときにメンバーをリセットすることを忘れないでください:
void MyWidget::mouseReleaseEvent(QMouseEvent *e) {
cursorLast = QPoint(); // reset
}
このコードはテストされておらず、メソッドで少し間違った名前を使用している可能性があることに注意してください。ただし、実際の名前は簡単に見つけることができます。
マウスの動きでペイントする方法の例を次に示します。