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. Widget with checkbox as an editor for ItemDelegate derivative
Forum Updated to NodeBB v4.3 + New Features

Widget with checkbox as an editor for ItemDelegate derivative

Scheduled Pinned Locked Moved Solved General and Desktop
8 Posts 2 Posters 1.8k Views 2 Watching
  • 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.
  • S Offline
    S Offline
    starryeyed
    wrote on 26 Jun 2018, 07:08 last edited by starryeyed
    #1

    Hello.
    I needed a centered checkbox for column in my QTableView.
    I followed this post and everything worked as soon as I realized that part had to be in .h file. My two problems are:

    • How to make this BooleanWidget appear not near upper left corner of my screen, but in the edited cell? Tried changing QWidget to QFrame, got nothing

    • How do I toggle editor's state just by 1 click? Can I override some 2 slots related to focus events? Like, onCellWithDelegateSelected to just auto toggle and onCellWithDelegateClickedOff to save the state into model?

    P.S. Header & .cpp

    1 Reply Last reply
    0
    • S Offline
      S Offline
      starryeyed
      wrote on 26 Jun 2018, 12:42 last edited by
      #2

      0_1530016922136_Безымянный.png

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mrjj
        Lifetime Qt Champion
        wrote on 26 Jun 2018, 19:04 last edited by mrjj
        #3

        Hi
        Does it sort of become a window?
        That happens if no parent is given. ( or NULL)
        Try to check if you give it a null parent where you create it.

        The issue is that CheckBoxDelegate dont get a parent.
        I assume you do like:
        ui->listWidget->setItemDelegate( new CheckBoxDelegate());
        So
        You need to make its constructor take parent as normally.
        and give it parent.
        .h
        CheckBoxDelegate(QObject* parent);
        .cpp
        CheckBoxDelegate::CheckBoxDelegate(QObject *parent) : QItemDelegate(parent) {
        }

        and then
        ui->listWidget->setItemDelegate( new CheckBoxDelegate(this));

        Then profit:
        alt text

        S 1 Reply Last reply 26 Jun 2018, 20:43
        2
        • M mrjj
          26 Jun 2018, 19:04

          Hi
          Does it sort of become a window?
          That happens if no parent is given. ( or NULL)
          Try to check if you give it a null parent where you create it.

          The issue is that CheckBoxDelegate dont get a parent.
          I assume you do like:
          ui->listWidget->setItemDelegate( new CheckBoxDelegate());
          So
          You need to make its constructor take parent as normally.
          and give it parent.
          .h
          CheckBoxDelegate(QObject* parent);
          .cpp
          CheckBoxDelegate::CheckBoxDelegate(QObject *parent) : QItemDelegate(parent) {
          }

          and then
          ui->listWidget->setItemDelegate( new CheckBoxDelegate(this));

          Then profit:
          alt text

          S Offline
          S Offline
          starryeyed
          wrote on 26 Jun 2018, 20:43 last edited by starryeyed
          #4

          @mrjj thank you very much for advice, it sounds legit, and now when I check with qDebug it shows that parent isn't null. However! What you can see on previous screenshot still happens... I mean, it's still grossly misplaced, can you zip me a working code sample with QListView? Or QTableView? Here are my current .h/.cpp

          P.S.For some reason I can see neither 'Locals' nor 'Expressions' (the locals are ever-invisible & expressions are visible when you add them but always with blank (unavailable) values). Iе worked before and now just doesn't. I declined updating from 5.10.1 to 5.11

          M 1 Reply Last reply 26 Jun 2018, 20:56
          0
          • S starryeyed
            26 Jun 2018, 20:43

            @mrjj thank you very much for advice, it sounds legit, and now when I check with qDebug it shows that parent isn't null. However! What you can see on previous screenshot still happens... I mean, it's still grossly misplaced, can you zip me a working code sample with QListView? Or QTableView? Here are my current .h/.cpp

            P.S.For some reason I can see neither 'Locals' nor 'Expressions' (the locals are ever-invisible & expressions are visible when you add them but always with blank (unavailable) values). Iе worked before and now just doesn't. I declined updating from 5.10.1 to 5.11

            M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 26 Jun 2018, 20:56 last edited by mrjj
            #5

            @starryeyed
            Hi
            sure. here is test project.
            https://www.dropbox.com/s/qfa31g3cjoo0wlr/MyDelegateCombo.zip?dl=0
            its your code but i just added to mainwindow.h to test fast.

            After given it parent, it stays in the cells.

            S 1 Reply Last reply 26 Jun 2018, 21:11
            1
            • M Offline
              M Offline
              mrjj
              Lifetime Qt Champion
              wrote on 26 Jun 2018, 20:58 last edited by
              #6

              About the expressions.
              Do you have this ON ?
              alt text

              1 Reply Last reply
              1
              • M mrjj
                26 Jun 2018, 20:56

                @starryeyed
                Hi
                sure. here is test project.
                https://www.dropbox.com/s/qfa31g3cjoo0wlr/MyDelegateCombo.zip?dl=0
                its your code but i just added to mainwindow.h to test fast.

                After given it parent, it stays in the cells.

                S Offline
                S Offline
                starryeyed
                wrote on 26 Jun 2018, 21:11 last edited by
                #7

                @mrjj I've found a way to do this without additional subclassing at all. Thanks for sample code! I am making a QButtonGroup of radio buttons using it.
                Here's how to center the box with a stylesheet

                QWidget* CheckBoxDelegate::createEditor(<...>)
                    {
                        QCheckBox *cb = new QCheckBox(parent);
                        cb->setStyleSheet("QCheckBox {margin-left: 43%; margin-right: 57%;}");
                        return cb;
                    }
                

                P.S. Resetting that checkbox and restarting the IDE helped! Thanks for making those views work :)

                M 1 Reply Last reply 26 Jun 2018, 21:14
                1
                • S starryeyed
                  26 Jun 2018, 21:11

                  @mrjj I've found a way to do this without additional subclassing at all. Thanks for sample code! I am making a QButtonGroup of radio buttons using it.
                  Here's how to center the box with a stylesheet

                  QWidget* CheckBoxDelegate::createEditor(<...>)
                      {
                          QCheckBox *cb = new QCheckBox(parent);
                          cb->setStyleSheet("QCheckBox {margin-left: 43%; margin-right: 57%;}");
                          return cb;
                      }
                  

                  P.S. Resetting that checkbox and restarting the IDE helped! Thanks for making those views work :)

                  M Offline
                  M Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on 26 Jun 2018, 21:14 last edited by
                  #8

                  @starryeyed
                  Clever margin trick :)
                  btw i assume you know that QListWidget/all views can be set to be checkable?
                  new_item->setFlags(new_item->flags() | Qt::ItemIsUserCheckable);

                  but i assume you goal was to have it centered and hence the delegate.

                  1 Reply Last reply
                  0

                  1/8

                  26 Jun 2018, 07:08

                  • Login

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