質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

2681閲覧

QGraphicsViewに表示した画像とViewとの間のマージンをなくしたい

fuji0130

総合スコア7

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/05/11 07:02

編集2020/05/12 00:37

#問題のあるコード
※全てのコードがあります。
https://github.com/FUJI0130/G_Layout_test/tree/master/G_Layout_test

#解決したい問題
参考ページ
https://stackoverflow.com/questions/17028680/qt5-c-qgraphicsview-images-dont-fit-view-frame

このページに書かれているように、
Viewのサイズに合わせて、
画像を表示+レイアウトできるようにしたいのですが、
画像とViewの間にマージンがあり、これを消すことができません。

** 参考画像**
イメージ説明

階層を上から順に書くと、(すみませんうまく書けませんでした・・・)
mainwindow
├graphicsView (graphicsScene)
├ graphicWidget
├ QGraphicsLinearLayout
└QGraphicsLayoutItem  (この中にpixmapを登録。)

の順で構成していると思っていますが、
現在表示されているマージンが、

・graphicsViewによるもの
・graphicsWidgetによるもの
・QGraphicsLinerLayoutによるもの
のどれかが関係しているのではないかと思っていますが、特定まで至れません。

Qtだけでなく、プログラム自体経験が浅い人間ですので、
どんなアドバイスでもお待ちしております、
宜しくお願い致します

#問題がありそうなコードの抜粋

c++

1 2//mainwindow.h 3 4#ifndef MAINWINDOW_H 5#define MAINWINDOW_H 6 7#include <QMainWindow> 8 9#include <QGraphicsLinearLayout> 10#include <QGraphicsGridLayout> 11#include <QPixmap> 12#include <QImage> 13#include <QGraphicsScene> 14#include <QGraphicsView> 15#include <qdebug.h> 16#include "graph_widget.h" 17#include "layout_test_Item.h" 18#include "custom_linearlayout.h" 19 20 21class Graph_Widget; 22class custom_LinearLayout; 23class Layout_test_Item; 24 25 26namespace Ui { 27class MainWindow; 28} 29 30class MainWindow : public QMainWindow 31{ 32 Q_OBJECT 33 34public: 35 explicit MainWindow(QWidget *parent = 0); 36 ~MainWindow(); 37 38private: 39 Ui::MainWindow *ui; 40 41private: 42 Graph_Widget *Graph_Widgets; 43 Graph_Widget *Graph_Widgets2; 44 45private: 46 QGraphicsScene *scene; 47 QGraphicsScene *scene2; 48 QGraphicsScene *scene3; 49 QGraphicsScene *scene4; 50 51public: 52 int check_x; 53 int check_y; 54 int check_w; 55 int check_h; 56 57 int check_x2; 58 int check_y2; 59 int check_x4; 60 int check_y4; 61 62protected: 63 void showEvent(QShowEvent *event); 64 65}; 66 67#endif // MAINWINDOW_H

c++

1//mainwindow.cpp 2 3#include "mainwindow.h" 4#include "ui_mainwindow.h" 5 6MainWindow::MainWindow(QWidget *parent) : 7 QMainWindow(parent), 8 ui(new Ui::MainWindow) 9{ 10 ui->setupUi(this); 11 ui->graphicsView->show(); 12 check_w = 0; 13 check_h = 0; 14 check_w = ui->graphicsView->width(); 15 check_h = ui->graphicsView->height(); 16 17 qDebug("check_w: %d\n",check_w); 18 qDebug("check_h : %d\n",check_h); 19 20 scene = new QGraphicsScene(); 21 Graph_Widgets = new Graph_Widget; 22 23 ui->graphicsView->setAlignment(Qt::AlignLeft|Qt::AlignTop); 24 25 Graph_Widgets->View_width = check_w; 26 Graph_Widgets->View_height = check_h; 27 28 Graph_Widgets->set_Item(); 29 30 scene->addItem(Graph_Widgets); 31 32 ui->graphicsView->setScene(scene); 33 ui->graphicsView->repaint(); 34 35 36 37 scene2 = new QGraphicsScene(); 38 Graph_Widgets2 = new Graph_Widget; 39 40 ui->graphicsView_2->setAlignment(Qt::AlignLeft|Qt::AlignBottom); 41 ui->graphicsView_2->setBackgroundBrush(Qt::black); 42 ui->graphicsView_2->setFrameStyle(QFrame::NoFrame); 43 ui->graphicsView_2->setContentsMargins(0,0,0,0); 44 check_x2 = ui->graphicsView_2->x(); 45 check_y2 = ui->graphicsView_2->y(); 46 QRect ref_Rect2 = QRect((qreal)check_x2,(qreal)check_y2,(qreal)check_w,(qreal)check_h); 47 ui->graphicsView_2->setGeometry(ref_Rect2); 48 scene2->setSceneRect(0,0,(qreal)check_w,(qreal)check_h); 49 ui->graphicsView_2->setScene(scene2); 50 51 52 53 Graph_Widgets2->View_width = check_w; 54 Graph_Widgets2->View_height = check_h; 55 Graph_Widgets2->setContentsMargins(0,0,0,0); 56 Graph_Widgets2->setWindowFrameMargins(0,0,0,0); 57 Graph_Widgets2->set_Item(); 58 scene2->addItem(Graph_Widgets2); 59 60 ui->graphicsView_2->show(); 61 62 63 scene3 = new QGraphicsScene(); 64 65 check_x = ui->graphicsView_3->x(); 66 check_y = ui->graphicsView_3->y(); 67 68 QRect ref_Rect = QRect((qreal)check_x,(qreal)check_y,(qreal)check_w,(qreal)check_h); 69 ui->graphicsView_3->setGeometry(ref_Rect); 70 ui->graphicsView_3->setBackgroundBrush(Qt::blue); 71 ui->graphicsView_3->setContentsMargins(0,0,0,0); 72 73 scene3->setSceneRect(0,0,(qreal)check_w,(qreal)check_h); 74 ui->graphicsView_3->setScene(scene3); 75 QRectF sceneRect = ui->graphicsView_3->sceneRect(); 76 77 QPixmap pixmap = QPixmap("/home/pi/G_Layout_test/nukiro.jpeg"); 78 qDebug("sceneRect.width(): %3.2lf\n",sceneRect.width()); 79 pixmap = pixmap.scaledToWidth(sceneRect.width()); 80 QGraphicsPixmapItem* pPixmap = new QGraphicsPixmapItem(); 81 pPixmap->setPixmap(pixmap); 82 scene3->addItem(pPixmap); 83 84 qDebug("graphicsView3-show after"); 85 86 qDebug("Graph_Widgets->View_width : %d\n",Graph_Widgets->View_width); 87 qDebug("Graph_Widgets->View_height : %d\n",Graph_Widgets->View_height); 88 89 90} 91 92MainWindow::~MainWindow() 93{ 94 delete ui; 95} 96 97void MainWindow::showEvent(QShowEvent *) 98{ 99 ui->graphicsView_2->show(); 100 ui->graphicsView_3->show(); 101 ui->graphicsView_4->show(); 102}

c++

1//Graph_Widget.cpp 2 3#include "graph_widget.h" 4 5Graph_Widget::Graph_Widget(QGraphicsWidget *parent) : QGraphicsWidget(parent, Qt::Widget) 6{ 7 windowLayout = new QGraphicsLinearLayout(Qt::Vertical); 8 linear = new QGraphicsLinearLayout(Qt::Vertical,windowLayout); 9 10 Item = new Layout_test_Item; 11 12 windowLayout->setSpacing(0.0); 13 14 linear->setSpacing(0.0); 15 16 windowLayout->setAlignment(Item,Qt::AlignTop|Qt::AlignLeft); 17 linear->setAlignment(Item,Qt::AlignTop|Qt::AlignLeft); 18 19} 20 21 22void Graph_Widget::set_Item() 23{ 24 test1 = QPixmap("/home/pi/G_Layout_test/nukiro.jpeg"); 25 Item->set_Pixmap(test1,View_width,View_height); 26 linear->addItem(Item); 27 linear->setStretchFactor(Item, 1); 28 29 30 Item = new Layout_test_Item; 31 32 Item->set_Pixmap(QPixmap("/home/pi/G_Layout_test/nukiro.jpeg"),View_width,View_height); 33 34 linear->addItem(Item); 35 linear->setStretchFactor(Item, 1); 36 37 windowLayout->addItem(linear); 38 39 setLayout(windowLayout); 40 setWindowTitle(tr("Basic Graphics Layouts Example")); 41 42}

c++

1//Layout_test_Item 2 3#include "layout_test_Item.h" 4 5Layout_test_Item::Layout_test_Item(QGraphicsItem *parent) 6 :QGraphicsLayoutItem(),QGraphicsItem(parent) 7{ 8 View_width = 0; 9 View_height = 0; 10 setGraphicsItem(this); 11} 12 13 14void Layout_test_Item::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, 15 QWidget *widget) 16{ 17 Q_UNUSED(widget); 18 Q_UNUSED(option); 19 QRectF frame(QPointF(0, 0), geometry().size()); 20 21 QPointF pixpos = QPointF(0,0); 22 painter->drawPixmap(pixpos, PXMP); 23 24} 25 26QRectF Layout_test_Item::boundingRect() const 27{ 28 qDebug("boundingRect\n"); 29 return QRectF(QPointF(0, 0), geometry().size()); 30} 31 32void Layout_test_Item::setGeometry(const QRectF &geom) 33{ 34 qDebug("setGeometry\n"); 35 prepareGeometryChange(); 36 QGraphicsLayoutItem::setGeometry(geom); 37 38 setPos(geom.topLeft()); 39} 40 41 42QSizeF Layout_test_Item::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const 43{ 44 switch (which) { 45 case Qt::MinimumSize: 46 case Qt::PreferredSize: 47 return PXMP.size(); 48 case Qt::MaximumSize: 49 return QSizeF(1000, 1000); 50 default: 51 break; 52 } 53 return constraint; 54} 55 56 57void Layout_test_Item::set_Pixmap(QPixmap pxmp , int width , int height) 58{ 59 PXMP = pxmp; 60 View_width = width; 61 View_height = height; 62 PXMP = PXMP.scaledToWidth(View_width,Qt::FastTransformation); 63 64} 65

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問