Results 1 to 4 of 4

Thread: QGraphicsScene appears way too small only when QGraphicsView is embedded in QWidget

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Apr 2020
    Posts
    7
    Thanks
    1
    Qt products
    Qt5

    Default QGraphicsScene appears way too small only when QGraphicsView is embedded in QWidget

    Hello, any Qt gurus out there who can help me figure out what I'm doing wrong here? I've been reading the documentation and searching online but have been banging my head against the wall with this for a few hours...

    I'm working on a little poker app, and I made a window (my class name "test" derived from QWidget) using QT Designer that has a QGraphicsView embedded in it, along with my control buttons underneath. The graphics area and control/chat area are laid out together in a Vertical Layout.

    I've added a background image (1920x1080p) and a few playing cards to the scene, but when I try and display it on my widget while calling fitInView(), the whole scene appears very tiny and centered (see attached photos).

    As a test, in my widget constructor I made a totally unrelated QGraphicsView set to the exact same scene, and this one works as expected (see photos) while using fitInView().

    I'm hoping there is something simple that I'm misunderstanding and would really appreciate some help/advice!

    Below is my widget constructor code along with some photos:

    test.cpp
    Qt Code:
    1. #include "test.h"
    2. #include "ui_test.h"
    3. #include "PlayerWidget.h"
    4. #include <QGraphicsProxyWidget>
    5.  
    6. test::test(QWidget *parent) :
    7. QWidget(parent),
    8. ui(new Ui::test),
    9. m_pokerScene{ nullptr },
    10. m_backgroundImage { new QGraphicsPixmapItem( QPixmap(":/resources/images/GreenTabletop 1920x1080.png")) },
    11. m_deck{ new Deck() }, //TODO: memory leak???
    12. m_pot{ 0 },
    13. m_deckPos{ QPointF(690, 150) },
    14. m_flopCard1Pos{ QPointF(430, 350) },
    15. m_flopCard2Pos{ QPointF(560, 350) },
    16. m_flopCard3Pos{ QPointF(690, 350) },
    17. m_turnCardPos{ QPointF(820, 350) },
    18. m_riverCardPos{ QPointF(950, 350) },
    19. m_tableName{ "" },
    20. m_maxPlayers{ 9 },
    21. m_buyInChipAmount{ 2000 },
    22. m_timeToAct{ 20000 }, // in milliseconds
    23. m_smallBlind{ 25 },
    24. m_bigBlind{ 50 }
    25. {
    26. ui->setupUi(this);
    27.  
    28. // Set up my QGraphicsScene of a poker table
    29. // and add items to it below
    30. m_pokerScene = new QGraphicsScene();
    31.  
    32. m_pokerScene->addItem(m_backgroundImage);
    33.  
    34. for (auto& card : m_deck->getDeck())
    35. {
    36. m_pokerScene->addItem(&card);
    37. card.setPos(m_deckPos);
    38. }
    39.  
    40. PlayerWidget* player1 = new PlayerWidget;
    41. QGraphicsProxyWidget *player1Proxy = m_pokerScene->addWidget(player1);
    42. player1Proxy->setPos(0,0);
    43.  
    44. m_deck->getDeck()[0].setPos(m_flopCard1Pos);
    45. m_deck->getDeck()[1].setPos(m_flopCard2Pos);
    46. m_deck->getDeck()[2].setPos(m_flopCard3Pos);
    47. m_deck->getDeck()[3].setPos(m_turnCardPos);
    48. m_deck->getDeck()[4].setPos(m_riverCardPos);
    49.  
    50. // tableArea is my QGraphicsView, embedded in this QWidget,
    51. // and is part of a Vertical Layout (see photo)
    52. ui->tableArea->setScene(m_pokerScene);
    53. ui->tableArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    54. ui->tableArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff );
    55.  
    56. // This call is where the problem seems to be,
    57. // below it are a few different ways I've tried so far
    58. // If I comment it out, the graphic appears zoomed in
    59. // by what looks like 50%, and I can scroll around to the normal edges
    60.  
    61. ui->tableArea->fitInView( m_pokerScene->sceneRect(), Qt::KeepAspectRatio );
    62.  
    63. // This one looks the closest to correct, but I don't know why! Still not right
    64. // ui->tableArea->fitInView( QRectF(0, 0, 1, 51), Qt::KeepAspectRatio );
    65.  
    66. // This one makes the graphic a little larger than the active, non-commented out call
    67. // ui->tableArea->fitInView( QRectF(0, 0, 900, 400), Qt::KeepAspectRatio );
    68.  
    69. // This one also shows the graphic zoomed in by what looks like 50%, and I can scroll
    70. // ui->tableArea->fitInView( QRectF(0, 0, 0, 0), Qt::KeepAspectRatio );
    71.  
    72. // This one has same result as the active, non-commented out call
    73. // ui->tableArea->fitInView( m_backgroundImage, Qt::KeepAspectRatio );
    74.  
    75.  
    76. // These last seven lines are here to show the same QGraphicsScene
    77. // in a new QGraphicsView that's unrelated to my poker widget
    78. // and works like I expect and want it to (see attached photos)
    79.  
    80. QGraphicsView* testView = new QGraphicsView;
    81. testView->setScene(m_pokerScene);
    82. testView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    83. testView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff );
    84. testView->fitInView( m_pokerScene->sceneRect(), Qt::KeepAspectRatio );
    85. testView->setWindowTitle("How It Should Look When Part Of My QWidget");
    86. testView->show();
    87. }
    To copy to clipboard, switch view to plain text mode 

Similar Threads

  1. Replies: 0
    Last Post: 15th April 2020, 04:56
  2. Replies: 2
    Last Post: 16th April 2013, 17:49
  3. Replies: 4
    Last Post: 28th February 2012, 11:04
  4. Replies: 1
    Last Post: 23rd February 2010, 08:29
  5. QWidget::pos Appears Unreliable
    By mbrusati in forum Qt Programming
    Replies: 1
    Last Post: 25th February 2009, 17:01

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.