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. How can I center QCheckBox in QTableView?
Forum Update on Monday, May 27th 2025

How can I center QCheckBox in QTableView?

Scheduled Pinned Locked Moved Solved General and Desktop
qtableview
25 Posts 5 Posters 4.0k 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.
  • eyllanescE eyllanesc

    @CuriousPan Another solution is use QProxyStyle, see https://stackoverflow.com/questions/60947269/pyqt5-qtablewidget-item-alignment/60954464#60954464:

    class CheckBoxStyle: public QProxyStyle{
    public:
        using QProxyStyle::QProxyStyle;
        QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget=nullptr) const{
            QRect r = QProxyStyle::subElementRect(element, option, widget);
            if(element == QStyle::SE_ItemViewItemCheckIndicator){
                r.moveCenter(option->rect.center());
            }
            return r;
        }
    }
    
    CheckBoxStyle* checkbox_style = new CheckBoxStyle(tableview->style());
    tableview->setStyle(checkbox_style);
    
    raven-worxR Offline
    raven-worxR Offline
    raven-worx
    Moderators
    wrote on last edited by
    #5

    @eyllanesc
    this moves every single checkbox in the table to the center...

    --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
    If you have a question please use the forum so others can benefit from the solution in the future

    1 Reply Last reply
    0
    • Christian EhrlicherC Christian Ehrlicher

      You should follow this example: https://wiki.qt.io/Center_a_QCheckBox_or_Decoration_in_an_Itemview

      C Offline
      C Offline
      CuriousPan
      wrote on last edited by
      #6

      @Christian-Ehrlicher, hey, this is a really nice example, but I don't understand what 'role' should I use in the model to center the checkbox, because now it's in the left top corner.

      JonBJ 1 Reply Last reply
      0
      • C CuriousPan

        @Christian-Ehrlicher, hey, this is a really nice example, but I don't understand what 'role' should I use in the model to center the checkbox, because now it's in the left top corner.

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #7

        @CuriousPan
        The code at @Christian-Ehrlicher's https://wiki.qt.io/Center_a_QCheckBox_or_Decoration_in_an_Itemview tells you what role it is using

        As alignment indicator the Qt::TextAlignmentRole is 'misused' since no text is drawn for the cell.

        and you can see it in the code you are copying:

        opt.rect = QStyle::alignedRect(opt.direction, index.data(Qt::TextAlignmentRole).value<Qt::Alignment>(), rect.size(), opt.rect);

        Or use your own role if you don't want to use that.

        C 1 Reply Last reply
        1
        • JonBJ JonB

          @CuriousPan
          The code at @Christian-Ehrlicher's https://wiki.qt.io/Center_a_QCheckBox_or_Decoration_in_an_Itemview tells you what role it is using

          As alignment indicator the Qt::TextAlignmentRole is 'misused' since no text is drawn for the cell.

          and you can see it in the code you are copying:

          opt.rect = QStyle::alignedRect(opt.direction, index.data(Qt::TextAlignmentRole).value<Qt::Alignment>(), rect.size(), opt.rect);

          Or use your own role if you don't want to use that.

          C Offline
          C Offline
          CuriousPan
          wrote on last edited by CuriousPan
          #8

          @JonB, yeees, I understood this and I was using Qt::TextAlignmentRole and returning Qt::AlignCenter, but for some reason it's not aligned :(
          21cc5073-d844-4a87-ac13-f40a60c0cea3-image.png

          3076c24a-05b5-476e-9154-09e658caebab-image.png

          JonBJ C 2 Replies Last reply
          0
          • C CuriousPan

            @JonB, yeees, I understood this and I was using Qt::TextAlignmentRole and returning Qt::AlignCenter, but for some reason it's not aligned :(
            21cc5073-d844-4a87-ac13-f40a60c0cea3-image.png

            3076c24a-05b5-476e-9154-09e658caebab-image.png

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #9

            @CuriousPan
            I do not know about the behaviour of the delegate. But if you want to know to know whether it is being "triggered" and recognises the role in question put in a qDebug() statement (in the delegate) to find out.

            C 1 Reply Last reply
            0
            • C CuriousPan

              @JonB, yeees, I understood this and I was using Qt::TextAlignmentRole and returning Qt::AlignCenter, but for some reason it's not aligned :(
              21cc5073-d844-4a87-ac13-f40a60c0cea3-image.png

              3076c24a-05b5-476e-9154-09e658caebab-image.png

              C Offline
              C Offline
              CuriousPan
              wrote on last edited by
              #10
              This post is deleted!
              1 Reply Last reply
              0
              • JonBJ JonB

                @CuriousPan
                I do not know about the behaviour of the delegate. But if you want to know to know whether it is being "triggered" and recognises the role in question put in a qDebug() statement (in the delegate) to find out.

                C Offline
                C Offline
                CuriousPan
                wrote on last edited by
                #11

                @JonB, yes, it's defenitely triggered.

                JonBJ 1 Reply Last reply
                0
                • C CuriousPan

                  @JonB, yes, it's defenitely triggered.

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #12

                  @CuriousPan
                  Find all your occurrences of

                  QStyle::alignedRect(opt.direction, index.data(Qt::TextAlignmentRole).value<Qt::Alignment>(), rect.size(), opt.rect)
                  

                  and qDebug() << index.data(Qt::TextAlignmentRole).value<Qt::Alignment>().

                  C 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @CuriousPan
                    Find all your occurrences of

                    QStyle::alignedRect(opt.direction, index.data(Qt::TextAlignmentRole).value<Qt::Alignment>(), rect.size(), opt.rect)
                    

                    and qDebug() << index.data(Qt::TextAlignmentRole).value<Qt::Alignment>().

                    C Offline
                    C Offline
                    CuriousPan
                    wrote on last edited by
                    #13

                    @JonB, it always retruns QFlags<Qt::AlignmentFlag>() 1 which is Qt::DecorationRole, right?

                    raven-worxR JonBJ 2 Replies Last reply
                    0
                    • C CuriousPan

                      @JonB, it always retruns QFlags<Qt::AlignmentFlag>() 1 which is Qt::DecorationRole, right?

                      raven-worxR Offline
                      raven-worxR Offline
                      raven-worx
                      Moderators
                      wrote on last edited by
                      #14

                      @CuriousPan said in How can I center QCheckBox in QTableView?:

                      it always retruns QFlagsQt::AlignmentFlag() 1 which is Qt::DecorationRole, right

                      the Qt::AlignmentFlag flags/enum doesnt contain Qt::DecorationRole, so no
                      https://doc.qt.io/qt-5/qt.html#AlignmentFlag-enum

                      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                      If you have a question please use the forum so others can benefit from the solution in the future

                      C 2 Replies Last reply
                      0
                      • raven-worxR raven-worx

                        @CuriousPan said in How can I center QCheckBox in QTableView?:

                        it always retruns QFlagsQt::AlignmentFlag() 1 which is Qt::DecorationRole, right

                        the Qt::AlignmentFlag flags/enum doesnt contain Qt::DecorationRole, so no
                        https://doc.qt.io/qt-5/qt.html#AlignmentFlag-enum

                        C Offline
                        C Offline
                        CuriousPan
                        wrote on last edited by
                        #15

                        @raven-worx, oh, I see. You're right. Anyway, why is that so?

                        1 Reply Last reply
                        0
                        • raven-worxR raven-worx

                          @CuriousPan said in How can I center QCheckBox in QTableView?:

                          it always retruns QFlagsQt::AlignmentFlag() 1 which is Qt::DecorationRole, right

                          the Qt::AlignmentFlag flags/enum doesnt contain Qt::DecorationRole, so no
                          https://doc.qt.io/qt-5/qt.html#AlignmentFlag-enum

                          C Offline
                          C Offline
                          CuriousPan
                          wrote on last edited by
                          #16

                          @raven-worx, wait! I confused you and me. This '1' is my custom printout. So what you suggested printing just gives following output: QFlags<Qt::AlignmentFlag>()

                          JonBJ 1 Reply Last reply
                          0
                          • C CuriousPan

                            @raven-worx, wait! I confused you and me. This '1' is my custom printout. So what you suggested printing just gives following output: QFlags<Qt::AlignmentFlag>()

                            JonBJ Offline
                            JonBJ Offline
                            JonB
                            wrote on last edited by JonB
                            #17

                            @CuriousPan
                            Qt::AlignLeft 0x0001 Aligns with the left edge.

                            So this value 1 is left alignment, just as per your picture, and no kind of centering specified, which would have value 4.

                            C 1 Reply Last reply
                            0
                            • JonBJ JonB

                              @CuriousPan
                              Qt::AlignLeft 0x0001 Aligns with the left edge.

                              So this value 1 is left alignment, just as per your picture, and no kind of centering specified, which would have value 4.

                              C Offline
                              C Offline
                              CuriousPan
                              wrote on last edited by
                              #18

                              @JonB, yeah, it is, but as I said, no numbers are printed.
                              f3a89a98-7f28-4581-955b-721b64fbfc0e-image.png

                              1 Reply Last reply
                              0
                              • C CuriousPan

                                @JonB, it always retruns QFlags<Qt::AlignmentFlag>() 1 which is Qt::DecorationRole, right?

                                JonBJ Offline
                                JonBJ Offline
                                JonB
                                wrote on last edited by JonB
                                #19

                                @CuriousPan said in How can I center QCheckBox in QTableView?:

                                @JonB, it always retruns QFlagsQt::AlignmentFlag() 1 which is Qt::DecorationRole, right?

                                That's what you wrote. See that 1? Can you please concentrate on one thing at a time.

                                C 1 Reply Last reply
                                0
                                • JonBJ JonB

                                  @CuriousPan said in How can I center QCheckBox in QTableView?:

                                  @JonB, it always retruns QFlagsQt::AlignmentFlag() 1 which is Qt::DecorationRole, right?

                                  That's what you wrote. See that 1? Can you please concentrate on one thing at a time.

                                  C Offline
                                  C Offline
                                  CuriousPan
                                  wrote on last edited by
                                  #20

                                  @JonB, yep, I can. I'm really sorry for confusing you. No 1 is printed, it's just my mistake.

                                  JonBJ 1 Reply Last reply
                                  0
                                  • C CuriousPan

                                    @JonB, yep, I can. I'm really sorry for confusing you. No 1 is printed, it's just my mistake.

                                    JonBJ Offline
                                    JonBJ Offline
                                    JonB
                                    wrote on last edited by
                                    #21

                                    @CuriousPan
                                    So that would be the value for left-align. Either you are not setting or returning the desired "center" flag on your item for the Qt::TextAlignmentRole --- you have to do that if you want it centered, that's what the code does --- or you are not looking at the right item/index.

                                    C 1 Reply Last reply
                                    0
                                    • JonBJ JonB

                                      @CuriousPan
                                      So that would be the value for left-align. Either you are not setting or returning the desired "center" flag on your item for the Qt::TextAlignmentRole --- you have to do that if you want it centered, that's what the code does --- or you are not looking at the right item/index.

                                      C Offline
                                      C Offline
                                      CuriousPan
                                      wrote on last edited by CuriousPan
                                      #22

                                      @JonB, I guess you're right, but, as I showed on this screenshot: fb7e083f-38ea-4de7-8c55-b8b77b24f946-image.png
                                      I'm using the correct role and column is defenitely correct (checked usingqDebug()).

                                      JonBJ 1 Reply Last reply
                                      0
                                      • C CuriousPan

                                        @JonB, I guess you're right, but, as I showed on this screenshot: fb7e083f-38ea-4de7-8c55-b8b77b24f946-image.png
                                        I'm using the correct role and column is defenitely correct (checked usingqDebug()).

                                        JonBJ Offline
                                        JonBJ Offline
                                        JonB
                                        wrote on last edited by JonB
                                        #23

                                        @CuriousPan

                                        • Print out index.column() in the delegate.
                                        • Print out RecurrentColumn.
                                        • Put a qDebug() just above return Qt::AlignCenter in your "screenshot" to make sure it's being hit.
                                        • Please don't paste code as screenshots, paste it as code. Show where you have that code and what is above the extract you show.
                                        C 1 Reply Last reply
                                        0
                                        • JonBJ JonB

                                          @CuriousPan

                                          • Print out index.column() in the delegate.
                                          • Print out RecurrentColumn.
                                          • Put a qDebug() just above return Qt::AlignCenter in your "screenshot" to make sure it's being hit.
                                          • Please don't paste code as screenshots, paste it as code. Show where you have that code and what is above the extract you show.
                                          C Offline
                                          C Offline
                                          CuriousPan
                                          wrote on last edited by CuriousPan
                                          #24

                                          @JonB

                                          • index.column() in the delegate has the proper number. 4 in my case as long as it is 4th (starting from 0) column in the table view.
                                          • What do you mean by printing RecurrentColumn?
                                          //checking other roles
                                          } else if (index.isValid() && role == Qt::TextAlignmentRole) { 
                                                   switch (index.column()) { 
                                                   case RecurrentColumn: 
                                                        qDebug() << "Hit"; 
                                                        return Qt::AlignCenter; 
                                                   case TotalColumn: 
                                                        return {Qt::AlignRight | Qt::AlignVCenter}; 
                                                   case PlnTotalColumn: 
                                                        return {Qt::AlignRight | Qt::AlignVCenter}; 
                                                   return Qt::AlignCenter; 
                                                   }
                                          }
                                          // "Hit" is getting printed.
                                          
                                          • Okay, will try to value your time and effort :)
                                          C 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