Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. General talk
  3. Qt 6
  4. Text from a QTableView's cell shows through inline QComboBox - OSX
Qt 6.12 LTS is out! See what's new in the release blog

Text from a QTableView's cell shows through inline QComboBox - OSX

Scheduled Pinned Locked Moved Unsolved Qt 6
17 Posts 4 Posters 4.7k 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi and welcome to devnet,

    Are you calling setCellWidget ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    R 1 Reply Last reply
    0
    • SGaistS SGaist

      Hi and welcome to devnet,

      Are you calling setCellWidget ?

      R Offline
      R Offline
      rpadrela
      wrote on last edited by
      #3

      @SGaist If that's a method from the QTableWidget, then, nope. I'm not using a QTableWidget, I'm using a QTableView.

      Btw, I have other types of delegates to embed other widgets (e.g. QSpinBox) in the table and those work fine. It's just the QComboBox that seems to have this problem.

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #4

        Can you show the code of that delegate ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        R 1 Reply Last reply
        0
        • SGaistS SGaist

          Can you show the code of that delegate ?

          R Offline
          R Offline
          rpadrela
          wrote on last edited by
          #5

          @SGaist Sure.

              class ComboBoxDelegate : public QStyledItemDelegate
              {
                  Q_OBJECT
          
              public:
                  explicit ComboBoxDelegate(QObject* parent);
                  ~ComboBoxDelegate() override = default;
          
                  QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
                  void setEditorData(QWidget *editor, const QModelIndex &index) const override;
                  void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
              };
          
              ComboBoxDelegate::ComboBoxDelegate(QObject* parent)
              : QStyledItemDelegate(parent)
              {
              }
          
              QWidget* ComboBoxDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
              {
                  QComboBox* comboBox = new QComboBox(parent);
                  comboBox->setModel(new ValueListModel(index));
                  return comboBox;
              }
          
              void ComboBoxDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
              {
                  qobject_cast<QComboBox*>(editor)->setCurrentText(index.data(Qt::EditRole).toString());
              }
          
              void ComboBoxDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
              {
                  model->setData(index, qobject_cast<QComboBox*>(editor)->currentText());
              }
          

          Thank you for looking into this.

          nageshN 1 Reply Last reply
          0
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #6

            Try adding:

            public:
            void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const override{
            editor->setGeometry(option.rect);
            }
            

            "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

            R 1 Reply Last reply
            0
            • VRoninV VRonin

              Try adding:

              public:
              void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const override{
              editor->setGeometry(option.rect);
              }
              
              R Offline
              R Offline
              rpadrela
              wrote on last edited by
              #7

              @VRonin Thanks for the suggestion. Unfortunately, it makes no difference.

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #8

                this is very odd... do you have a custom stylesheet applyed?

                "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

                R 1 Reply Last reply
                0
                • VRoninV VRonin

                  this is very odd... do you have a custom stylesheet applyed?

                  R Offline
                  R Offline
                  rpadrela
                  wrote on last edited by
                  #9

                  @VRonin Nope

                  1 Reply Last reply
                  0
                  • R rpadrela

                    @SGaist Sure.

                        class ComboBoxDelegate : public QStyledItemDelegate
                        {
                            Q_OBJECT
                    
                        public:
                            explicit ComboBoxDelegate(QObject* parent);
                            ~ComboBoxDelegate() override = default;
                    
                            QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
                            void setEditorData(QWidget *editor, const QModelIndex &index) const override;
                            void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
                        };
                    
                        ComboBoxDelegate::ComboBoxDelegate(QObject* parent)
                        : QStyledItemDelegate(parent)
                        {
                        }
                    
                        QWidget* ComboBoxDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
                        {
                            QComboBox* comboBox = new QComboBox(parent);
                            comboBox->setModel(new ValueListModel(index));
                            return comboBox;
                        }
                    
                        void ComboBoxDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
                        {
                            qobject_cast<QComboBox*>(editor)->setCurrentText(index.data(Qt::EditRole).toString());
                        }
                    
                        void ComboBoxDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
                        {
                            model->setData(index, qobject_cast<QComboBox*>(editor)->currentText());
                        }
                    

                    Thank you for looking into this.

                    nageshN Offline
                    nageshN Offline
                    nagesh
                    wrote on last edited by
                    #10

                    @rpadrela I feel there is some thing wrong here(not sure)

                        {
                            qobject_cast<QComboBox*>(editor)->setCurrentText(index.data(Qt::EditRole).toString());
                        }
                    

                    Why are you setting the combo box text here?
                    Is it editable comboBox?
                    Set the comboBox setCurrentIndex here. If comboBox list of elements is set through model.

                    VRoninV R 2 Replies Last reply
                    0
                    • nageshN nagesh

                      @rpadrela I feel there is some thing wrong here(not sure)

                          {
                              qobject_cast<QComboBox*>(editor)->setCurrentText(index.data(Qt::EditRole).toString());
                          }
                      

                      Why are you setting the combo box text here?
                      Is it editable comboBox?
                      Set the comboBox setCurrentIndex here. If comboBox list of elements is set through model.

                      VRoninV Offline
                      VRoninV Offline
                      VRonin
                      wrote on last edited by VRonin
                      #11

                      @nagesh The current code is correct.

                      from https://doc.qt.io/qt-5/qcombobox.html#currentText-prop

                      The setter setCurrentText() simply calls setEditText() if the combo box is editable. Otherwise, if there is a matching text in the list, currentIndex is set to the corresponding index.

                      "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
                      0
                      • nageshN nagesh

                        @rpadrela I feel there is some thing wrong here(not sure)

                            {
                                qobject_cast<QComboBox*>(editor)->setCurrentText(index.data(Qt::EditRole).toString());
                            }
                        

                        Why are you setting the combo box text here?
                        Is it editable comboBox?
                        Set the comboBox setCurrentIndex here. If comboBox list of elements is set through model.

                        R Offline
                        R Offline
                        rpadrela
                        wrote on last edited by
                        #12

                        @nagesh QComboBox is not editable.

                        Could this be an issue currently affecting Mac OS X only?

                        VRoninV 1 Reply Last reply
                        0
                        • R rpadrela

                          @nagesh QComboBox is not editable.

                          Could this be an issue currently affecting Mac OS X only?

                          VRoninV Offline
                          VRoninV Offline
                          VRonin
                          wrote on last edited by VRonin
                          #13

                          @rpadrela said in Text from a QTableView's cell shows through inline QComboBox - OSX:

                          Could this be an issue currently affecting Mac OS X only?

                          On windows, both the windows style and Fusion work correctly with this delegate.

                          Could you try adding QApplication::setStyle(QStyleFactory::create("Fusion")); after you create the QApplication in your main()? and see if you still have the problem on Fusion?

                          "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

                          R 1 Reply Last reply
                          1
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #14

                            Did you test with 6.1 ?
                            From the looks of it's indeed macOS specific. IIRC there have been several glitches in the rendering of widgets with item views.

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            0
                            • VRoninV VRonin

                              @rpadrela said in Text from a QTableView's cell shows through inline QComboBox - OSX:

                              Could this be an issue currently affecting Mac OS X only?

                              On windows, both the windows style and Fusion work correctly with this delegate.

                              Could you try adding QApplication::setStyle(QStyleFactory::create("Fusion")); after you create the QApplication in your main()? and see if you still have the problem on Fusion?

                              R Offline
                              R Offline
                              rpadrela
                              wrote on last edited by
                              #15

                              @VRonin

                              This

                              QApplication::setStyle(QStyleFactory::create("Fusion"));
                              

                              fixes it.

                              I haven't looked into styles yet but it seems like I should. :D

                              Thank you for your help.

                              1 Reply Last reply
                              0
                              • VRoninV Offline
                                VRoninV Offline
                                VRonin
                                wrote on last edited by
                                #16

                                This means it's a bug in MacOS style, might be worth reporting it

                                "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

                                R 1 Reply Last reply
                                0
                                • VRoninV VRonin

                                  This means it's a bug in MacOS style, might be worth reporting it

                                  R Offline
                                  R Offline
                                  rpadrela
                                  wrote on last edited by
                                  #17

                                  @VRonin just reported it here https://bugreports.qt.io/browse/QTBUG-93731

                                  Thank you everyone for your help.

                                  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
                                  • Unsolved