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. Errors in subclass of QSqlRelationalDelegate
Forum Updated to NodeBB v4.3 + New Features

Errors in subclass of QSqlRelationalDelegate

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 3 Posters 916 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.
  • Christian EhrlicherC Christian Ehrlicher

    @Panoss said in Errors in subclass of QSqlRelationalDelegate:

    isinstance

    What does this function do / where is it defined? You for sure want to use qobject_cast<>() instead.

    P Offline
    P Offline
    Panoss
    wrote on last edited by
    #3

    @Christian-Ehrlicher said in Errors in subclass of QSqlRelationalDelegate:

    use qobject_cast<>() instead.

    I did it this way:

    qobject_cast <QComboBox*>(editor )){
    editor->model().select();
    

    The error from the first line is gone.
    On the second I get:
    'bookdelegate.cpp:133:21: error: no member named 'model' in 'QWidget''

    Christian EhrlicherC 1 Reply Last reply
    0
    • P Panoss

      @Christian-Ehrlicher said in Errors in subclass of QSqlRelationalDelegate:

      use qobject_cast<>() instead.

      I did it this way:

      qobject_cast <QComboBox*>(editor )){
      editor->model().select();
      

      The error from the first line is gone.
      On the second I get:
      'bookdelegate.cpp:133:21: error: no member named 'model' in 'QWidget''

      Christian EhrlicherC Online
      Christian EhrlicherC Online
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #4

      @Panoss said in Errors in subclass of QSqlRelationalDelegate:

      qobject_cast <QComboBox*>(editor )){

      And what should this help? You should assign the return value to a variable. c basics.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      P 1 Reply Last reply
      1
      • Christian EhrlicherC Christian Ehrlicher

        @Panoss said in Errors in subclass of QSqlRelationalDelegate:

        qobject_cast <QComboBox*>(editor )){

        And what should this help? You should assign the return value to a variable. c basics.

        P Offline
        P Offline
        Panoss
        wrote on last edited by
        #5

        @Christian-Ehrlicher
        What I 'm actually trying to do is convert this python code to Qt c++:

            def createEditor(self, parent, option, index):
                # column of combo box 'position'
                positionColumn = 2
                print("myDelegate.createEditor index.column()=" + str(index.column()) + " option=" + str(option) )
                if index.column() == positionColumn:
                    editor = QSqlRelationalDelegate.createEditor(self, parent, option, index)
                    if isinstance(editor, QComboBox):
                        editor.model().select()
                    return editor
                else:
                    return super(myDelegate, self).createEditor(parent, option, index)
        
        JonBJ 1 Reply Last reply
        0
        • Christian EhrlicherC Online
          Christian EhrlicherC Online
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by Christian Ehrlicher
          #6

          Learning the very basics of c++ is not part of this forum. Doing a simple assignment of a function call to a variable is really not that hard.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          1 Reply Last reply
          1
          • P Offline
            P Offline
            Panoss
            wrote on last edited by Panoss
            #7

            You mean this?

            QComboBox* mycombo = qobject_cast <QComboBox*>(editor );
            
            1 Reply Last reply
            0
            • P Offline
              P Offline
              Panoss
              wrote on last edited by Panoss
              #8

              This is the code I ended up with (from the QSqlRelationalDelegate 's code), and works!
              Any comments are welcome.

              
                  int positionColumn = 2;
                  qDebug()<< "BookDelegate.createEditor index.column()=" << (index.column()) << " option=" << option ;
                  if (index.column() == positionColumn){
                      const QSqlRelationalTableModel *sqlModel = qobject_cast<const QSqlRelationalTableModel *>(index.model());
                      QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : nullptr;
                      if (!childModel)
                          return QStyledItemDelegate::createEditor(parent, option, index);
              
                      QComboBox *combo = new QComboBox(parent);
                      combo->setModel(childModel);
                      combo->setModelColumn(1);
                      combo->installEventFilter(const_cast<BookDelegate *>(this));
                      childModel->select();
                      return combo;
                  }
              
              1 Reply Last reply
              0
              • P Panoss

                @Christian-Ehrlicher
                What I 'm actually trying to do is convert this python code to Qt c++:

                    def createEditor(self, parent, option, index):
                        # column of combo box 'position'
                        positionColumn = 2
                        print("myDelegate.createEditor index.column()=" + str(index.column()) + " option=" + str(option) )
                        if index.column() == positionColumn:
                            editor = QSqlRelationalDelegate.createEditor(self, parent, option, index)
                            if isinstance(editor, QComboBox):
                                editor.model().select()
                            return editor
                        else:
                            return super(myDelegate, self).createEditor(parent, option, index)
                
                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by JonB
                #9

                @Panoss said in Errors in subclass of QSqlRelationalDelegate:

                        editor = QSqlRelationalDelegate.createEditor(self, parent, option, index)
                        if isinstance(editor, QComboBox):
                            editor.model().select()
                        return editor
                
                QWidget *editor = QSqlRelationalDelegate::createEditor(parent, option, index);
                QComboBox *combo = qobject_cast<QComboBox *>(editor);
                if (combo)
                     combo->model()->select();
                return editor;
                
                P 1 Reply Last reply
                2
                • JonBJ JonB

                  @Panoss said in Errors in subclass of QSqlRelationalDelegate:

                          editor = QSqlRelationalDelegate.createEditor(self, parent, option, index)
                          if isinstance(editor, QComboBox):
                              editor.model().select()
                          return editor
                  
                  QWidget *editor = QSqlRelationalDelegate::createEditor(parent, option, index);
                  QComboBox *combo = qobject_cast<QComboBox *>(editor);
                  if (combo)
                       combo->model()->select();
                  return editor;
                  
                  P Offline
                  P Offline
                  Panoss
                  wrote on last edited by
                  #10

                  @JonB said in Errors in subclass of QSqlRelationalDelegate:

                  return editor;

                  Should I return the editor or the combo?

                  JonBJ 1 Reply Last reply
                  0
                  • P Panoss

                    @JonB said in Errors in subclass of QSqlRelationalDelegate:

                    return editor;

                    Should I return the editor or the combo?

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

                    @Panoss
                    Since I wrote return editor; and not return combo; you have the answer :)

                    But you should understand why this is. No matter what editor = QSqlRelationalDelegate::createEditor(), which is what you want to return under all circumstances. combo only has a != nullptr value if editor is a QComboBox * --- i.e. the createEditor() returned a QWidget which is a QComboBox --- and of course in that case editor == combo anyway. But if, for whatever reason, editor is not combobox/QComboBox * --- presumably for a column which is not the foreign key column but some other column --- you still want to return whatever that editor is.

                    My C++ is a direct translation of the original Python, which I presume to be correct/desired, unless you want to change that behaviour for some reason.

                    1 Reply Last reply
                    3
                    • P Offline
                      P Offline
                      Panoss
                      wrote on last edited by
                      #12

                      @JonB (and to all of course) thank you for your time and effort!
                      In python it works fine, I will try your code but I am sure it's fine!

                      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