Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QGraphicsPixmapItem QGraphicsRotation NO ANTIALIASING!
QtWS25 Last Chance

QGraphicsPixmapItem QGraphicsRotation NO ANTIALIASING!

Scheduled Pinned Locked Moved General and Desktop
9 Posts 2 Posters 5.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    billouparis
    wrote on last edited by
    #1

    Hello,

    I am trying to display a simple pixmap item (based on a PNG file) iniside my scene and apply a 3D rotation to it using QGraphicsRotation (rotation around the Y axis). And I would like to get the pixmap drawn with antialiasing.

    I have to set the RenderHints to (QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing); in my QGraphicsView constructor, but the drawing of the QGraphicsPixmapItem was still without antialiasing.

    So I derived my own QGraphicsPixmapItem class, to be able to overload the paint method. I added a @ painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing); @ in the paint method, and then call QGraphicsPixmapItem::paint(painter, option, widget), but I still did not get any antialiasing.

    I have the same isssue either on Windows XP, or under Linux X11.

    In the paint method of my derived class, if I call paint->drawPixmap(...) then the pixmap is drawn correctly, I mean with antialiasing.

    Can somebody explain to me why is there no antialiasing in my previous described cases? Thank you!

    Edit: adapted text a bit to fix rendering; Andre

    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      ZapB
      wrote on last edited by
      #2

      Well, what does QGraphicsPixmapItem::paint() do that is different to what you do? Does it for example override your renderhints? Is it set to use device coordinate caching?

      Nokia Certified Qt Specialist
      Interested in hearing about Qt related work

      1 Reply Last reply
      0
      • B Offline
        B Offline
        billouparis
        wrote on last edited by
        #3

        "Well, what does QGraphicsPixmapItem::paint() do that is different to what you do?"

        -> I don't know, but apprently it does not change my renderhints apparently.

        "Is it set to use device coordinate caching?"

        -> I don't know, I just tried to set the caching mode myselft and tried the three options, none of them changed anything.

        1 Reply Last reply
        0
        • Z Offline
          Z Offline
          ZapB
          wrote on last edited by
          #4

          Don't be afraid to look into the Qt source - it won't bite you ;-). A 2 minute search of the Qt source code reveals this:

          @
          void QGraphicsPixmapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
          QWidget *widget)
          {
          Q_D(QGraphicsPixmapItem);
          Q_UNUSED(widget);

          painter->setRenderHint(QPainter::SmoothPixmapTransform,
                                 (d->transformationMode == Qt::SmoothTransformation));
          
          painter->drawPixmap(d->offset, d->pixmap);
          
          if (option->state & QStyle::State_Selected)
              qt_graphicsItem_highlightSelected(this, painter, option);
          

          }
          @

          So the paint function does set a render hint. Notably the QPainter::SmoothPixmapTransform renderhint. So it sets this to true iff

          @d->transformationMode == Qt::SmoothTransformation@

          So how do we get this to evaluate to true? A quick look at the docs shows me this "function":http://doc.qt.nokia.com/latest/qgraphicspixmapitem.html#setTransformationMode.

          I suggest you call this function and set the transformation mode to true once you have created your item. Then you should get anti-aliased drawing (unless you override it with something else in your derived paint event of course) ;-)

          Nokia Certified Qt Specialist
          Interested in hearing about Qt related work

          1 Reply Last reply
          0
          • B Offline
            B Offline
            billouparis
            wrote on last edited by
            #5

            The problem I actually have is debugging under Linux, when I press F11 on the call to the paint line, IT SIMPLY WON'T DISPLAY ANY SOURCE CODE AT ALL. This GDB thing is driving me crazy, I tried days and days to get the source code to get displayed but it simply wouldn't.

            Anyway I tried on PC, and here I can access the source code alas.
            So I set the Qt::SmoothTransformation mode as you mentionned and IT IS ACTUALLY WORKING Now!

            I thank you for your answer to my question. We can now close this thread.
            Thank you ZapB.

            Regards,
            Bill

            1 Reply Last reply
            0
            • Z Offline
              Z Offline
              ZapB
              wrote on last edited by
              #6

              Well to step into the Qt code in the debugger you need a debug build of Qt. You can open the source in your ide though.

              Nokia Certified Qt Specialist
              Interested in hearing about Qt related work

              1 Reply Last reply
              0
              • B Offline
                B Offline
                billouparis
                wrote on last edited by
                #7

                I think my Qt is compiled with debug option, though I have to triple check this.

                Now, i am still stuck with pixmap items being grouped in a pixmap group, the rendering is still not antialiased for those.
                Have to check this now.

                Thank you ZapB

                1 Reply Last reply
                0
                • Z Offline
                  Z Offline
                  ZapB
                  wrote on last edited by
                  #8

                  You're welcome. Feel free to come back with more questions if you can't resolve it. Code snippets (or even better compilable examples) are always useful.

                  Nokia Certified Qt Specialist
                  Interested in hearing about Qt related work

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    billouparis
                    wrote on last edited by
                    #9

                    I couldn't find a simple solution to apply a QGraphicsRotation directly to a QGraphicsItemGroup and have my items been displayed with antialiasing, so I simply apply the QGraphicsRotation to each items included in my group to have something decent.
                    Thank you,

                    Bill

                    1 Reply Last reply
                    0

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved