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. add buttons in tablewidget's row
Forum Updated to NodeBB v4.3 + New Features

add buttons in tablewidget's row

Scheduled Pinned Locked Moved Unsolved General and Desktop
19 Posts 5 Posters 8.4k Views 1 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
    saber
    wrote on 12 Aug 2018, 11:36 last edited by saber 8 Dec 2018, 11:38
    #1

    i want to add buttons in the right side of the row .
    like this. it will appear only when one row is selected .(only one row is selectable) and otherwise buttons not shown.

    0_1534073447873_Untitled image.png
    there is a one "setCornerWidget" but it is only takes a widget,i want buttons.
    how cant in do that??

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mrjj
      Lifetime Qt Champion
      wrote on 12 Aug 2018, 11:44 last edited by
      #2

      Hi
      What is the list ?
      I mean type of widget.

      S 1 Reply Last reply 12 Aug 2018, 12:45
      0
      • M mrjj
        12 Aug 2018, 11:44

        Hi
        What is the list ?
        I mean type of widget.

        S Offline
        S Offline
        saber
        wrote on 12 Aug 2018, 12:45 last edited by
        #3

        @mrjj
        qtablewidget

        J 1 Reply Last reply 12 Aug 2018, 15:46
        0
        • S saber
          12 Aug 2018, 12:45

          @mrjj
          qtablewidget

          J Online
          J Online
          JonB
          wrote on 12 Aug 2018, 15:46 last edited by JonB 8 Dec 2018, 15:47
          #4

          @saber , @mrjj

          I trust/hope the answer is your own QTableWidgetItem (http://doc.qt.io/qt-5/qtablewidgetitem.html), and that is what @VRonin freaks over and tries to get us to never to use, right? :) You can't do this with a QStyledItemDelgate surely...?

          S 1 Reply Last reply 13 Aug 2018, 03:34
          0
          • J JonB
            12 Aug 2018, 15:46

            @saber , @mrjj

            I trust/hope the answer is your own QTableWidgetItem (http://doc.qt.io/qt-5/qtablewidgetitem.html), and that is what @VRonin freaks over and tries to get us to never to use, right? :) You can't do this with a QStyledItemDelgate surely...?

            S Offline
            S Offline
            saber
            wrote on 13 Aug 2018, 03:34 last edited by
            #5

            @JonB
            is there noway to achieve this?

            M 1 Reply Last reply 13 Aug 2018, 06:18
            0
            • S saber
              13 Aug 2018, 03:34

              @JonB
              is there noway to achieve this?

              M Offline
              M Offline
              mrjj
              Lifetime Qt Champion
              wrote on 13 Aug 2018, 06:18 last edited by
              #6

              @saber

              Hi
              have a look at
              http://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html

              its bascailly what you want to do,.
              but except of drawing stars , you will draw your custom buttons.

              @JonB
              Its setWidgetItem, he hates due to bad performance. ;)
              But yes you can make this with Delegate.

              J 1 Reply Last reply 14 Aug 2018, 07:11
              1
              • V Offline
                V Offline
                VRonin
                wrote on 13 Aug 2018, 15:37 last edited by VRonin
                #7

                May setItemWidget burn in hell forever!

                #include <QApplication>
                #include <QTableView>
                #include <QStandardItemModel>
                #include <QStyledItemDelegate>
                #include <QHeaderView>
                #include <QPushButton>
                class TailButtonsDelegate : public QStyledItemDelegate{
                    Q_OBJECT
                    Q_DISABLE_COPY(TailButtonsDelegate)
                public:
                    explicit TailButtonsDelegate(QObject* parent = Q_NULLPTR)
                        :QStyledItemDelegate(parent)
                    {}
                    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                        Q_ASSERT(index.isValid());
                        QStyleOptionViewItem opt = option;
                        initStyleOption(&opt, index);
                        const QWidget *widget = option.widget;
                        QStyle *style = widget ? widget->style() : QApplication::style();
                        style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
                        if(!(option.state & QStyle::State_Selected))
                            return;
                        QStyleOptionButton editButtonOption;
                        editButtonOption.text = QString(QChar(0x270D)); //use emoji for text, optionally you can use icon + iconSize
                        editButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(2*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                        editButtonOption.features = QStyleOptionButton::None;
                        editButtonOption.direction = option.direction;
                        editButtonOption.fontMetrics = option.fontMetrics;
                        editButtonOption.palette = option.palette;
                        editButtonOption.styleObject = option.styleObject;
                        QStyleOptionButton removeButtonOption(editButtonOption);
                        removeButtonOption.text = QString(QChar(0x274C)); //use emoji for text, optionally you can use icon + iconSize
                        removeButtonOption.rect = QRect(option.rect.left()+option.rect.width()-option.rect.height(),option.rect.top(),option.rect.height(),option.rect.height());
                        style->drawControl(QStyle::CE_PushButton, &editButtonOption, painter, widget);
                        style->drawControl(QStyle::CE_PushButton, &removeButtonOption, painter, widget);
                    }
                    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                        const QSize baseSize = QStyledItemDelegate::sizeHint(option,index);
                        return QSize(baseSize.width()+(2*baseSize.height()),baseSize.height());
                    }
                    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                        QWidget* result = new QWidget(parent);
                        result->setGeometry(option.rect);
                        QWidget* baseEditor = QStyledItemDelegate::createEditor(result,option,index);
                        baseEditor->setObjectName("baseEditor");
                        baseEditor->setGeometry(0,0,option.rect.width()-(2*option.rect.height()),option.rect.height());
                        QPushButton* editButton = new QPushButton(QChar(0x270D),result);
                        editButton->setObjectName("editButton");
                        editButton->setGeometry(option.rect.width()-(2*option.rect.height()), 0, option.rect.height(),option.rect.height());
                        connect(editButton,&QPushButton::clicked,[](){qDebug("Edit");});
                        QPushButton* removeButton = new QPushButton(QChar(0x274C),result);
                        removeButton->setObjectName("removeButton");
                        removeButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                        connect(removeButton,&QPushButton::clicked,[](){qDebug("Remove");});
                        return result;
                    }
                    void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE{
                        QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                        Q_ASSERT(baseEditor);
                        QStyledItemDelegate::setEditorData(baseEditor,index);
                    }
                    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE{
                        QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                        Q_ASSERT(baseEditor);
                        QStyledItemDelegate::setModelData(baseEditor,model,index);
                    }
                    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                        Q_UNUSED(index)
                        editor->setGeometry(option.rect);
                        QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                        Q_ASSERT(baseEditor);
                        baseEditor->setGeometry(0,0,option.rect.width()-(2*option.rect.height()),option.rect.height());
                        QWidget* editButton = editor->findChild<QWidget*>("editButton");
                        Q_ASSERT(editButton);
                        editButton->setGeometry(option.rect.width()-(2*option.rect.height()), 0, option.rect.height(),option.rect.height());
                        QWidget* removeButton = editor->findChild<QWidget*>("removeButton");
                        Q_ASSERT(removeButton);
                        removeButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                        editor->setGeometry(option.rect);
                    }
                };
                int main(int argc, char **argv) {
                    QApplication app(argc, argv);
                    QStandardItemModel baseModel;
                    baseModel.insertRows(0, 3);
                    baseModel.insertColumns(0, 4);
                    for(int i=0;i<3;++i){
                        for(int j=0;j<4;++j){
                            baseModel.setData(baseModel.index(i,j),QStringLiteral("%1,%2").arg(i).arg(j));
                        }
                    }
                    QTableView view;
                    view.setEditTriggers(QTableView::AllEditTriggers);
                    view.setModel(&baseModel);
                    view.setSelectionBehavior(QTableView::SelectRows);
                    view.horizontalHeader()->setStretchLastSection(true);
                    view.setItemDelegateForColumn(3,new TailButtonsDelegate(&view));
                    view.show();
                    return app.exec();
                }
                

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                1 Reply Last reply
                5
                • M Offline
                  M Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on 14 Aug 2018, 06:35 last edited by
                  #8

                  And behold the Beauty
                  alt text

                  Thank you @VRonin :)

                  1 Reply Last reply
                  1
                  • M mrjj
                    13 Aug 2018, 06:18

                    @saber

                    Hi
                    have a look at
                    http://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html

                    its bascailly what you want to do,.
                    but except of drawing stars , you will draw your custom buttons.

                    @JonB
                    Its setWidgetItem, he hates due to bad performance. ;)
                    But yes you can make this with Delegate.

                    J Online
                    J Online
                    JonB
                    wrote on 14 Aug 2018, 07:11 last edited by
                    #9

                    @mrjj said in add buttons in tablewidget's row:

                    @JonB
                    Its setWidgetItem, he hates due to bad performance. ;)
                    But yes you can make this with Delegate.

                    Damn!
                    Isn't there anything you can't do with delegates and which do require setting the widget item? :)

                    M 1 Reply Last reply 14 Aug 2018, 07:20
                    0
                    • J JonB
                      14 Aug 2018, 07:11

                      @mrjj said in add buttons in tablewidget's row:

                      @JonB
                      Its setWidgetItem, he hates due to bad performance. ;)
                      But yes you can make this with Delegate.

                      Damn!
                      Isn't there anything you can't do with delegates and which do require setting the widget item? :)

                      M Offline
                      M Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on 14 Aug 2018, 07:20 last edited by
                      #10

                      @JonB
                      Not really, but the delegate is kinda involving to make if you have
                      multiple widgets and need to reflect various states. You have to go digging around in
                      Qt source to see how to mirror the states to draw them with right QStyle calls.
                      Also,say you want hover effect on your (drawn widgets) widgets
                      then you suddenly have to add extra logic to handle and so on.
                      So first time hurts a lot. ;)

                      1 Reply Last reply
                      4
                      • S Offline
                        S Offline
                        saber
                        wrote on 8 Sept 2018, 10:52 last edited by
                        #11

                        @mrjj @VRonin
                        i need help.
                        i added the code in sparate header file and used this in the QTableWidget.
                        by this way

                        ui->boklist->setItemDelegateForColumn(1, new TailButtonsDelegate(ui->boklist));
                        }
                        

                        here is the header file

                        #ifndef TAILBUTTONSDELEGATE_H
                        #define TAILBUTTONSDELEGATE_H
                        
                        #include <QApplication>
                        #include <QTableView>
                        #include <QStandardItemModel>
                        #include <QStyledItemDelegate>
                        #include <QHeaderView>
                        #include <QPushButton>
                        
                        class TailButtonsDelegate : public QStyledItemDelegate {
                            Q_OBJECT
                            Q_DISABLE_COPY(TailButtonsDelegate)
                        public:
                            explicit TailButtonsDelegate(QObject* parent = Q_NULLPTR)
                                :QStyledItemDelegate(parent)
                            {}
                        
                            void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                Q_ASSERT(index.isValid());
                                QStyleOptionViewItem opt = option;
                                initStyleOption(&opt, index);
                                const QWidget *widget = option.widget;
                                QStyle *style = widget ? widget->style() : QApplication::style();
                                style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
                                if(!(option.state & QStyle::State_Selected))
                                    return;
                                QStyleOptionButton editButtonOption;
                                editButtonOption.text = QString(QChar(0x270D)); //use emoji for text, optionally you can use icon + iconSize
                                editButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(2*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                editButtonOption.features = QStyleOptionButton::None;
                                editButtonOption.direction = option.direction;
                                editButtonOption.fontMetrics = option.fontMetrics;
                                editButtonOption.palette = option.palette;
                                editButtonOption.styleObject = option.styleObject;
                                QStyleOptionButton removeButtonOption(editButtonOption);
                                removeButtonOption.text = QString(QChar(0x274C)); //use emoji for text, optionally you can use icon + iconSize
                                removeButtonOption.rect = QRect(option.rect.left()+option.rect.width()-option.rect.height(),option.rect.top(),option.rect.height(),option.rect.height());
                                style->drawControl(QStyle::CE_PushButton, &editButtonOption, painter, widget);
                                style->drawControl(QStyle::CE_PushButton, &removeButtonOption, painter, widget);
                            }
                            QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                const QSize baseSize = QStyledItemDelegate::sizeHint(option,index);
                                return QSize(baseSize.width()+(2*baseSize.height()),baseSize.height());
                            }
                            QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                QWidget* result = new QWidget(parent);
                                result->setGeometry(option.rect);
                                QWidget* baseEditor = QStyledItemDelegate::createEditor(result,option,index);
                                baseEditor->setObjectName("baseEditor");
                                baseEditor->setGeometry(0,0,option.rect.width()-(2*option.rect.height()),option.rect.height());
                                QPushButton* editButton = new QPushButton(/*QChar(0x270D),*/ result);
                                editButton->setObjectName("editButton");
                                editButton->setGeometry(option.rect.width()-(2*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                connect(editButton,&QPushButton::clicked,[](){qDebug("Edit");});
                                QPushButton* removeButton = new QPushButton(QChar(0x274C),result);
                                removeButton->setObjectName("removeButton");
                                removeButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                                connect(removeButton,&QPushButton::clicked,[](){qDebug("Remove");});
                                return result;
                            }
                            void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                Q_ASSERT(baseEditor);
                                QStyledItemDelegate::setEditorData(baseEditor,index);
                            }
                            void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                Q_ASSERT(baseEditor);
                                QStyledItemDelegate::setModelData(baseEditor,model,index);
                            }
                            void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                Q_UNUSED(index)
                                editor->setGeometry(option.rect);
                                QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                Q_ASSERT(baseEditor);
                                baseEditor->setGeometry(0,0,option.rect.width()-(2*option.rect.height()),option.rect.height());
                                QWidget* editButton = editor->findChild<QWidget*>("editButton");
                                Q_ASSERT(editButton);
                                editButton->setGeometry(option.rect.width()-(2*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                QWidget* removeButton = editor->findChild<QWidget*>("removeButton");
                                Q_ASSERT(removeButton);
                                removeButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                                editor->setGeometry(option.rect);
                            }
                        };
                        
                        #endif // TAILBUTTONSDELEGATE_H
                        
                        

                        it works but there is some problem.

                        1. i want to set the icon from a resource file . how can i do that?
                          0_1536403880465_a.png
                        2. when i clicked in the row that is going in the edit mode.(only second column)
                          0_1536403890495_a2.png

                        please help.

                        NT:

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 8 Sept 2018, 11:08 last edited by
                          #12

                          hi

                          i want to set the icon from a resource file . how can i do that?

                          Add it to the res file and
                          use syntax
                          ":/tractor.png"
                          To make sure syntax is correct, RIGHt click file after adding it.
                          it show the path to use.

                          -when i clicked in the row that is going in the edit mode.(only second column)
                          Im not sure what issue is. you never edit a "row" just a cell.

                          S 1 Reply Last reply 8 Sept 2018, 11:14
                          0
                          • M mrjj
                            8 Sept 2018, 11:08

                            hi

                            i want to set the icon from a resource file . how can i do that?

                            Add it to the res file and
                            use syntax
                            ":/tractor.png"
                            To make sure syntax is correct, RIGHt click file after adding it.
                            it show the path to use.

                            -when i clicked in the row that is going in the edit mode.(only second column)
                            Im not sure what issue is. you never edit a "row" just a cell.

                            S Offline
                            S Offline
                            saber
                            wrote on 8 Sept 2018, 11:14 last edited by saber 9 Aug 2018, 11:18
                            #13

                            @mrjj
                            my mistake .
                            second cell is going in edit mode.
                            here is the ui vriable
                            0_1536405278895_s.png

                            NT : icon not showing.just showing a part of the text.
                            0_1536405506382_e.png

                            /editButtonOption.text = QString(":/icons/edit.svg");
                            
                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              saber
                              wrote on 8 Sept 2018, 11:52 last edited by saber 9 Aug 2018, 11:56
                              #14

                              ok. i found the fix to show icon .

                               editButtonOption.icon = QIcon(":/icons/edit.svg");
                              

                              but the icon is not in center.
                              0_1536407763919_k.png

                              1 Reply Last reply
                              0
                              • E Offline
                                E Offline
                                edwin1234
                                wrote on 15 Nov 2022, 09:05 last edited by edwin1234
                                #15

                                i have done making the button inside the table but i cannot click it

                                M 1 Reply Last reply 15 Nov 2022, 12:39
                                0
                                • E edwin1234
                                  15 Nov 2022, 09:05

                                  i have done making the button inside the table but i cannot click it

                                  M Offline
                                  M Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on 15 Nov 2022, 12:39 last edited by
                                  #16

                                  @edwin1234
                                  hi
                                  Did you use the TailButtonsDelegate ?

                                  E 1 Reply Last reply 16 Nov 2022, 01:15
                                  0
                                  • M mrjj
                                    15 Nov 2022, 12:39

                                    @edwin1234
                                    hi
                                    Did you use the TailButtonsDelegate ?

                                    E Offline
                                    E Offline
                                    edwin1234
                                    wrote on 16 Nov 2022, 01:15 last edited by
                                    #17

                                    @mrjj yes i did i used this as a header file

                                    1 Reply Last reply
                                    0
                                    • E Offline
                                      E Offline
                                      edwin1234
                                      wrote on 16 Nov 2022, 01:39 last edited by
                                      #18
                                      #ifndef TAILBUTTONSDELEGATE_H
                                      #define TAILBUTTONSDELEGATE_H
                                      #include <QApplication>
                                      #include <QTableView>
                                      #include <QStandardItemModel>
                                      #include <QPushButton>
                                      #include <QIcon>
                                      #include <QSize>
                                      #include <QDebug>
                                      #include <QStyledItemDelegate>
                                      #include <QHeaderView>
                                      #include <QPushButton>
                                      class TailButtonsDelegate : public QStyledItemDelegate {
                                          Q_OBJECT
                                          Q_DISABLE_COPY(TailButtonsDelegate)
                                      private slots:
                                          void on_push_button_editprodorder();
                                      public:
                                          explicit TailButtonsDelegate(QObject* parent = Q_NULLPTR)
                                              :QStyledItemDelegate(parent)
                                          {}
                                      
                                          void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                              Q_ASSERT(index.isValid());
                                              QStyleOptionViewItem opt = option;
                                              initStyleOption(&opt, index);
                                              const QWidget *widget = option.widget;
                                              QStyle *style = widget ? widget->style() : QApplication::style();
                                              style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
                                              if(!(option.state & QStyle::State_Selected))
                                                  return;
                                      
                                              QStyleOptionButton editButtonOption;
                                              editButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/fill.svg"); //use emoji for text, optionally you can use icon + iconSize
                                              editButtonOption.iconSize = QSize(10,10);
                                              editButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(5*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                              editButtonOption.features = QStyleOptionButton::None;
                                              editButtonOption.direction = option.direction;
                                              editButtonOption.fontMetrics = option.fontMetrics;
                                              editButtonOption.palette = option.palette;
                                              editButtonOption.styleObject = option.styleObject;
                                              QStyleOptionButton removeButtonOption(editButtonOption);
                                              removeButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/delete-left.svg"); //use emoji for text, optionally you can use icon + iconSize
                                              removeButtonOption.iconSize = QSize(10,10);
                                              removeButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(4*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                              QStyleOptionButton SKUButtonOption(editButtonOption);
                                              SKUButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/code-commit.svg"); //use emoji for text, optionally you can use icon + iconSize
                                              SKUButtonOption.iconSize = QSize(10,10);
                                              SKUButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(3*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                              QStyleOptionButton StartButtonOption(editButtonOption);
                                              StartButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/calendar-plus.svg"); //use emoji for text, optionally you can use icon + iconSize
                                              StartButtonOption.iconSize = QSize(10,10);
                                              StartButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(2*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                              QStyleOptionButton CloseButtonOption(editButtonOption);
                                              CloseButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/stop.svg"); //use emoji for text, optionally you can use icon + iconSize
                                              CloseButtonOption.iconSize = QSize(10,10);
                                              CloseButtonOption.rect = QRect(option.rect.left()+option.rect.width()-option.rect.height(),option.rect.top(),option.rect.height(),option.rect.height());
                                      
                                              style->drawControl(QStyle::CE_PushButton, &SKUButtonOption, painter, widget);
                                              style->drawControl(QStyle::CE_PushButton, &editButtonOption, painter, widget);
                                              style->drawControl(QStyle::CE_PushButton, &removeButtonOption, painter, widget);
                                              style->drawControl(QStyle::CE_PushButton, &StartButtonOption, painter, widget);
                                              style->drawControl(QStyle::CE_PushButton, &CloseButtonOption, painter, widget);
                                      
                                      
                                          }
                                          QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                              const QSize baseSize = QStyledItemDelegate::sizeHint(option,index);
                                              return QSize(baseSize.width()+(2*baseSize.height()),baseSize.height());
                                          }
                                          QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                              QWidget* result = new QWidget(parent);
                                              result->setGeometry(option.rect);
                                              QWidget* baseEditor = QStyledItemDelegate::createEditor(result,option,index);
                                              baseEditor->setObjectName("baseEditor");
                                              baseEditor->setGeometry(0,0,option.rect.width()-(5*option.rect.height()),option.rect.height());
                                              QPushButton* editButton = new QPushButton(/*QChar(0x270D), */result);
                                              editButton->setObjectName("editButton");
                                              editButton->setGeometry(option.rect.width()-(5*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                              connect(editButton,&QPushButton::clicked,[](){qDebug() <<"Edit";});
                                              QPushButton* removeButton = new QPushButton(QChar(0x274C),result);
                                              removeButton->setObjectName("removeButton");
                                              removeButton->setGeometry(option.rect.width()-(4*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                              connect(removeButton,&QPushButton::clicked,[](){qDebug() <<"Remove";});
                                              QPushButton* SKUButton = new QPushButton(QChar(0x274C),result);
                                              SKUButton->setObjectName("SKUButton");
                                              SKUButton->setGeometry(option.rect.width()-(3*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                              connect(SKUButton,&QPushButton::clicked,[](){qDebug() <<"Sub Part SKU";});
                                              QPushButton* StartButton = new QPushButton(QChar(0x274C),result);
                                              StartButton->setObjectName("StartButton");
                                              StartButton->setGeometry(option.rect.width()-(2*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                              connect(StartButton,&QPushButton::clicked,[](){qDebug() <<"Start Plan Order";});
                                              QPushButton* CloseButton = new QPushButton(QChar(0x274C),result);
                                              CloseButton->setObjectName("CloseButton");
                                              CloseButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                                              connect(CloseButton,&QPushButton::clicked,[](){qDebug() << "Close Plan Order";});
                                              return result;
                                          }
                                          void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                              QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                              Q_ASSERT(baseEditor);
                                              QStyledItemDelegate::setEditorData(baseEditor,index);
                                          }
                                          void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                              QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                              Q_ASSERT(baseEditor);
                                              QStyledItemDelegate::setModelData(baseEditor,model,index);
                                          }
                                          void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                              Q_UNUSED(index)
                                              editor->setGeometry(option.rect);
                                              QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                              Q_ASSERT(baseEditor);
                                              baseEditor->setGeometry(0,0,option.rect.width()-(5*option.rect.height()),option.rect.height());
                                      
                                              QWidget* editButton = editor->findChild<QWidget*>("editButton");
                                              Q_ASSERT(editButton);
                                              editButton->setGeometry(option.rect.width()-(5*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                      
                                              QWidget* removeButton = editor->findChild<QWidget*>("removeButton");
                                              Q_ASSERT(removeButton);
                                              removeButton->setGeometry(option.rect.width()-(4*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                      
                                              QWidget* SKUButton = editor->findChild<QWidget*>("SKUButton");
                                              Q_ASSERT(SKUButton);
                                              SKUButton->setGeometry(option.rect.width()-(3*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                      
                                              QWidget* StartButton = editor->findChild<QWidget*>("StartButton");
                                              Q_ASSERT(StartButton);
                                              StartButton->setGeometry(option.rect.width()-(2 *option.rect.height()), 0, option.rect.height(),option.rect.height());
                                      
                                              QWidget* CloseButton = editor->findChild<QWidget*>("CloseButton");
                                              Q_ASSERT(CloseButton);
                                              CloseButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                                              editor->setGeometry(option.rect);
                                          }
                                      };
                                      #endif // TAILBUTTONSDELEGATE_H
                                      
                                      
                                      M 1 Reply Last reply 16 Nov 2022, 07:25
                                      0
                                      • E edwin1234
                                        16 Nov 2022, 01:39
                                        #ifndef TAILBUTTONSDELEGATE_H
                                        #define TAILBUTTONSDELEGATE_H
                                        #include <QApplication>
                                        #include <QTableView>
                                        #include <QStandardItemModel>
                                        #include <QPushButton>
                                        #include <QIcon>
                                        #include <QSize>
                                        #include <QDebug>
                                        #include <QStyledItemDelegate>
                                        #include <QHeaderView>
                                        #include <QPushButton>
                                        class TailButtonsDelegate : public QStyledItemDelegate {
                                            Q_OBJECT
                                            Q_DISABLE_COPY(TailButtonsDelegate)
                                        private slots:
                                            void on_push_button_editprodorder();
                                        public:
                                            explicit TailButtonsDelegate(QObject* parent = Q_NULLPTR)
                                                :QStyledItemDelegate(parent)
                                            {}
                                        
                                            void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                                Q_ASSERT(index.isValid());
                                                QStyleOptionViewItem opt = option;
                                                initStyleOption(&opt, index);
                                                const QWidget *widget = option.widget;
                                                QStyle *style = widget ? widget->style() : QApplication::style();
                                                style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
                                                if(!(option.state & QStyle::State_Selected))
                                                    return;
                                        
                                                QStyleOptionButton editButtonOption;
                                                editButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/fill.svg"); //use emoji for text, optionally you can use icon + iconSize
                                                editButtonOption.iconSize = QSize(10,10);
                                                editButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(5*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                                editButtonOption.features = QStyleOptionButton::None;
                                                editButtonOption.direction = option.direction;
                                                editButtonOption.fontMetrics = option.fontMetrics;
                                                editButtonOption.palette = option.palette;
                                                editButtonOption.styleObject = option.styleObject;
                                                QStyleOptionButton removeButtonOption(editButtonOption);
                                                removeButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/delete-left.svg"); //use emoji for text, optionally you can use icon + iconSize
                                                removeButtonOption.iconSize = QSize(10,10);
                                                removeButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(4*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                                QStyleOptionButton SKUButtonOption(editButtonOption);
                                                SKUButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/code-commit.svg"); //use emoji for text, optionally you can use icon + iconSize
                                                SKUButtonOption.iconSize = QSize(10,10);
                                                SKUButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(3*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                                QStyleOptionButton StartButtonOption(editButtonOption);
                                                StartButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/calendar-plus.svg"); //use emoji for text, optionally you can use icon + iconSize
                                                StartButtonOption.iconSize = QSize(10,10);
                                                StartButtonOption.rect = QRect(option.rect.left()+option.rect.width()-(2*option.rect.height()),option.rect.top(),option.rect.height(),option.rect.height());
                                                QStyleOptionButton CloseButtonOption(editButtonOption);
                                                CloseButtonOption.icon = QIcon(":/icon/fontawesome-free-6.2.0-desktop/svgs/solid/stop.svg"); //use emoji for text, optionally you can use icon + iconSize
                                                CloseButtonOption.iconSize = QSize(10,10);
                                                CloseButtonOption.rect = QRect(option.rect.left()+option.rect.width()-option.rect.height(),option.rect.top(),option.rect.height(),option.rect.height());
                                        
                                                style->drawControl(QStyle::CE_PushButton, &SKUButtonOption, painter, widget);
                                                style->drawControl(QStyle::CE_PushButton, &editButtonOption, painter, widget);
                                                style->drawControl(QStyle::CE_PushButton, &removeButtonOption, painter, widget);
                                                style->drawControl(QStyle::CE_PushButton, &StartButtonOption, painter, widget);
                                                style->drawControl(QStyle::CE_PushButton, &CloseButtonOption, painter, widget);
                                        
                                        
                                            }
                                            QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                                const QSize baseSize = QStyledItemDelegate::sizeHint(option,index);
                                                return QSize(baseSize.width()+(2*baseSize.height()),baseSize.height());
                                            }
                                            QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                                QWidget* result = new QWidget(parent);
                                                result->setGeometry(option.rect);
                                                QWidget* baseEditor = QStyledItemDelegate::createEditor(result,option,index);
                                                baseEditor->setObjectName("baseEditor");
                                                baseEditor->setGeometry(0,0,option.rect.width()-(5*option.rect.height()),option.rect.height());
                                                QPushButton* editButton = new QPushButton(/*QChar(0x270D), */result);
                                                editButton->setObjectName("editButton");
                                                editButton->setGeometry(option.rect.width()-(5*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                                connect(editButton,&QPushButton::clicked,[](){qDebug() <<"Edit";});
                                                QPushButton* removeButton = new QPushButton(QChar(0x274C),result);
                                                removeButton->setObjectName("removeButton");
                                                removeButton->setGeometry(option.rect.width()-(4*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                                connect(removeButton,&QPushButton::clicked,[](){qDebug() <<"Remove";});
                                                QPushButton* SKUButton = new QPushButton(QChar(0x274C),result);
                                                SKUButton->setObjectName("SKUButton");
                                                SKUButton->setGeometry(option.rect.width()-(3*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                                connect(SKUButton,&QPushButton::clicked,[](){qDebug() <<"Sub Part SKU";});
                                                QPushButton* StartButton = new QPushButton(QChar(0x274C),result);
                                                StartButton->setObjectName("StartButton");
                                                StartButton->setGeometry(option.rect.width()-(2*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                                connect(StartButton,&QPushButton::clicked,[](){qDebug() <<"Start Plan Order";});
                                                QPushButton* CloseButton = new QPushButton(QChar(0x274C),result);
                                                CloseButton->setObjectName("CloseButton");
                                                CloseButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                                                connect(CloseButton,&QPushButton::clicked,[](){qDebug() << "Close Plan Order";});
                                                return result;
                                            }
                                            void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                                QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                                Q_ASSERT(baseEditor);
                                                QStyledItemDelegate::setEditorData(baseEditor,index);
                                            }
                                            void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                                QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                                Q_ASSERT(baseEditor);
                                                QStyledItemDelegate::setModelData(baseEditor,model,index);
                                            }
                                            void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE{
                                                Q_UNUSED(index)
                                                editor->setGeometry(option.rect);
                                                QWidget* baseEditor = editor->findChild<QWidget*>("baseEditor");
                                                Q_ASSERT(baseEditor);
                                                baseEditor->setGeometry(0,0,option.rect.width()-(5*option.rect.height()),option.rect.height());
                                        
                                                QWidget* editButton = editor->findChild<QWidget*>("editButton");
                                                Q_ASSERT(editButton);
                                                editButton->setGeometry(option.rect.width()-(5*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                        
                                                QWidget* removeButton = editor->findChild<QWidget*>("removeButton");
                                                Q_ASSERT(removeButton);
                                                removeButton->setGeometry(option.rect.width()-(4*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                        
                                                QWidget* SKUButton = editor->findChild<QWidget*>("SKUButton");
                                                Q_ASSERT(SKUButton);
                                                SKUButton->setGeometry(option.rect.width()-(3*option.rect.height()), 0, option.rect.height(),option.rect.height());
                                        
                                                QWidget* StartButton = editor->findChild<QWidget*>("StartButton");
                                                Q_ASSERT(StartButton);
                                                StartButton->setGeometry(option.rect.width()-(2 *option.rect.height()), 0, option.rect.height(),option.rect.height());
                                        
                                                QWidget* CloseButton = editor->findChild<QWidget*>("CloseButton");
                                                Q_ASSERT(CloseButton);
                                                CloseButton->setGeometry(option.rect.width()-option.rect.height(), 0, option.rect.height(),option.rect.height());
                                                editor->setGeometry(option.rect);
                                            }
                                        };
                                        #endif // TAILBUTTONSDELEGATE_H
                                        
                                        
                                        M Offline
                                        M Offline
                                        mrjj
                                        Lifetime Qt Champion
                                        wrote on 16 Nov 2022, 07:25 last edited by
                                        #19

                                        Hi
                                        So what do you mean by "inside the table but i cannot click it" ?

                                        It's currently connected to a lambda that prints "Edit" in application output.

                                        connect(editButton,&QPushButton::clicked,{qDebug("Edit");});

                                        This part is not working ? or what is not working ?

                                        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