質問
ボタンが押されたときにイベントを作成したいプログラムは、画像内のマウスポインタを使用して自由な手の線を描画できるようにする必要が現在、タブウィンドウに写真のアルバムを表示できる段階にあります。誰かがいくつかのガイドラインや手がかりを提供することでそれを助けることができますか???
解決
マウスの動きでペイントする方法の例を次に示します:
他のヒント
あなたの質問はかなり広いです、私は恐れています。他の人が同じ問題をどのように解決したかを見て、あなたが達成したいことについていくつかの研究を行うことをお勧めします。特定の質問に答えるためのリソースとしてSOをより多く使用することで、SOを最大限に活用できます。
そうは言っても、ここにあなたが見ることができるいくつかのことがあります:
QGraphicsScene
:多数の2Dグラフィックスオブジェクトを含むことができるサーフェス(つまりユーザーが描画できるようにする線)
QGraphicsSceneMouseEvent
:マウスからシーンへの入力を取得するためにキャッチして処理する必要があるイベント。このイベントを処理するには、次のサブクラスを作成します QGraphicsScene
と再実装していますが、 QGraphicsScene::mouseMoveEvent
, 、またはによって eventFilterのインストール あなたのシーンで。
単純なQWidgetを使用して画像を表示している場合(つまり、QGraphicsSceneのような複雑なものではありません)、単純な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
}
このコードはテストされておらず、メソッドで少し間違った名前を使用している可能性がありますが、実際のコードを見つけるのは簡単です。