お世話になります・杉原@CircleTekです
すみません タイトルを訂正して再送いたします
Qt5.12.3(msvc2017_64) で複数の画像をタイル型式に並べて表示する方法とその 画像をマウスで選択した時にどの(何番目の)画像を選択したのかを調べる方法に ついて教えて下さい
QStringList jpegList に複数(例えば30枚)の画像ファイル名が格納されてい ます 此れを4列8行のように画像を並べて表示したいのですが
graphicsView を額縁 QGraphicsScene をキャンバスと考えて
QGraphicsScene に pixmap 画像を登録、graphicsView を画像枚数分並べてその 中に QGraphicsScene を set していくのがよいのか
pixmap 画像を QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap); として item を画像枚数分作成して QGraphicsScene に addItem して graphicsView に QGraphicsScene を set していくのがよいのでしょうか
因みに以下のようなソースで 一列ですが後の方法で画像の表示は出来たのです がはたしてこの方法で良いのか、 この方法でどうすればマウスで選択した時の情報が得られるのか。。。
{// Jpeg 表示
QString FName; QStringList jpegList; int w= 640 ; int h = 480; int i;
QPixmap pixmap; QImage image(w,h,QImage::Format_ARGB32);
myScene.clear(); for(i=0; i < jpegList.count() ;i++){ image.isNull(); image.load(jpegList.at(i)); pixmap = QPixmap::fromImage(image); pixmap = pixmap.scaled(340,240, Qt::KeepAspectRatio, Qt:: FastTransformation); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap); item->setX(0); item->setY(i*240); item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem:: ItemIsSelectable); myScene.addItem(item); ui->graphicsView->setScene(&myScene); }
this->update(); }
宜しくご教示下さい
杉原さん
超亀レスなのでもう解決されていると思いますが、 QGraphicsPixmapItemを使うサンプルを書いてみました。(imageは適当に置いてくださいまし) https://gist.github.com/Atsushi4/fd0b42aa8f104afa1ca78306ad4f0c6e
QGraphicsItem::ItemIsFocusable フラグを立てておいて、 QGraphicsScene::focusItemChanged でアイテムのクリックを検知しています。
他にはQGraphicsPixmapItemを継承して mousePressEvent からシグナルを出すとか(イマイチ)、 QGraphicsViewを継承してmousePressEvent で itemAt(event->pos()) を使って取るとか、 方法は色々あって何がベストかは自分にはちょっと分からないです(;^_^A
個人的にはSceneを複数のビューに違う表示で見せるとか、 (地図のような)移動・ズームをするとか、 中のアイテムをインタラクティブに移動・変形するとか、 そんな時にQGraphicsViewを使うかなーというイメージです。
今回のサンプルくらいの中身だと、 QWidgetベースでQGridLayout置いてQLabelにsetPixmapして並べて、 QWidget::mousePressEvent で childAt(event->pos()) でもいいかなーと思います。 (余談ですがちょうどFlow Layoutのサンプルもありますネ https://doc.qt.io/qt-5.9/qtwidgets-layouts-flowlayout-example.html)
乱文にてご容赦くださいまし。
□■━━━━━━━━━━━━━━━━━ 山本 篤史 e-mail: atsushi.yamyam@gmail.com ━━━━━━━━━━━━━━━━━■□
2019年5月22日(水) 21:24 SUGIHARA sugihara@circletek.jp:
お世話になります・杉原@CircleTekです
すみません タイトルを訂正して再送いたします
Qt5.12.3(msvc2017_64) で複数の画像をタイル型式に並べて表示する方法とその 画像をマウスで選択した時にどの(何番目の)画像を選択したのかを調べる方法に ついて教えて下さい
QStringList jpegList に複数(例えば30枚)の画像ファイル名が格納されてい ます 此れを4列8行のように画像を並べて表示したいのですが
graphicsView を額縁 QGraphicsScene をキャンバスと考えて
QGraphicsScene に pixmap 画像を登録、graphicsView を画像枚数分並べてその 中に QGraphicsScene を set していくのがよいのか
pixmap 画像を QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap); として item を画像枚数分作成して QGraphicsScene に addItem して graphicsView に QGraphicsScene を set していくのがよいのでしょうか
因みに以下のようなソースで 一列ですが後の方法で画像の表示は出来たのです がはたしてこの方法で良いのか、 この方法でどうすればマウスで選択した時の情報が得られるのか。。。
{// Jpeg 表示
QString FName; QStringList jpegList; int w= 640 ; int h = 480; int i; QPixmap pixmap; QImage image(w,h,QImage::Format_ARGB32); myScene.clear(); for(i=0; i < jpegList.count() ;i++){ image.isNull(); image.load(jpegList.at(i)); pixmap = QPixmap::fromImage(image); pixmap = pixmap.scaled(340,240, Qt::KeepAspectRatio, Qt::
FastTransformation); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap); item->setX(0); item->setY(i*240); item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem:: ItemIsSelectable); myScene.addItem(item); ui->graphicsView->setScene(&myScene); }
this->update();
}
宜しくご教示下さい
-- = FROM ================================================================= _/_/_/ _/_/_/_/_/ _/_/_/_/ サークルテック株式会社 _/ _/ _/ CircleTek.JP _/ _/ _/ 杉原 利彦 _/_/_/ _/ _/_/_/ E-mail address:sugihara@circletek.jp http://www.circletek.jp TEL 0848-60-0102, FAX 0848-60-0078 ======================================================================== _______________________________________________ Qt-users mailing list Qt-users@qt-users.jp http://qt-users.jp/mailman/listinfo/qt-users