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. Assigning ItemDelegates to different columns in a view
Forum Updated to NodeBB v4.3 + New Features

Assigning ItemDelegates to different columns in a view

Scheduled Pinned Locked Moved Unsolved General and Desktop
15 Posts 5 Posters 1.5k Views 3 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.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by VRonin
    #4

    Code is correct but the two suggestions about removing the parent to the delegate are wrong.

    from http://doc.qt.io/qt-5/qabstractitemview.html#setItemDelegateForColumn

    Any existing column delegate for column will be removed, but not deleted. QAbstractItemView does not take ownership of delegate.

    So leave the this in the parent or you'll leak memory

    If I use only one of the column assignments the program works. If I use both, the program stops working.

    Could you specify "stop working" better?

    "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

    G 1 Reply Last reply
    3
    • VRoninV VRonin

      Code is correct but the two suggestions about removing the parent to the delegate are wrong.

      from http://doc.qt.io/qt-5/qabstractitemview.html#setItemDelegateForColumn

      Any existing column delegate for column will be removed, but not deleted. QAbstractItemView does not take ownership of delegate.

      So leave the this in the parent or you'll leak memory

      If I use only one of the column assignments the program works. If I use both, the program stops working.

      Could you specify "stop working" better?

      G Offline
      G Offline
      gabor53
      wrote on last edited by
      #5

      @VRonin
      It crashes and gives a message saying unexpectedly stopped.

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

        Could you post your stacktrace?

        "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

        G 1 Reply Last reply
        1
        • VRoninV VRonin

          Could you post your stacktrace?

          G Offline
          G Offline
          gabor53
          wrote on last edited by
          #7

          @VRonin
          Yes.
          1 myDelegate::createEditor mydelegate.cpp 16 0x41c31f
          2 QAbstractItemViewPrivate::editor qabstractitemview.cpp 4199 0x14f94af1
          3 QAbstractItemViewPrivate::openEditor qabstractitemview.cpp 4384 0x14f95895
          4 QAbstractItemView::edit qabstractitemview.cpp 2676 0x14f8fa8e
          5 QAbstractItemView::edit qabstractitemview.cpp 1201 0x14f8acf5
          6 QAbstractItemView::closeEditor qabstractitemview.cpp 2852 0x14f904de
          7 QAbstractItemView::qt_static_metacall moc_qabstractitemview.cpp 421 0x14f964de
          8 QMetaObject::activate qobject.cpp 3740 0x1cb5782
          9 QMetaObject::activate qobject.cpp 3602 0x1cb50a2
          10 QAbstractItemDelegate::closeEditor moc_qabstractitemdelegate.cpp 204 0x14fcec46
          11 QAbstractItemDelegatePrivate::editorEventFilter qabstractitemdelegate.cpp 477 0x14fcdf28
          12 QStyledItemDelegate::eventFilter qstyleditemdelegate.cpp 583 0x14ff872d
          13 QCoreApplicationPrivate::sendThroughObjectEventFilters qcoreapplication.cpp 1099 0x1c8ca0e
          14 QApplicationPrivate::notify_helper qapplication.cpp 3795 0x14d2fb50
          15 QApplication::notify qapplication.cpp 3181 0x14d2d24c
          16 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x1c8c6e7
          17 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 234 0x150ac865
          18 QWidgetWindow::handleKeyEvent qwidgetwindow.cpp 656 0x14d7fe17
          19 QWidgetWindow::event qwidgetwindow.cpp 232 0x14d7e741
          20 QApplicationPrivate::notify_helper qapplication.cpp 3799 0x14d2fb70
          21 QApplication::notify qapplication.cpp 3159 0x14d2d143
          22 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x1c8c6e7
          23 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 234 0x8f380ad
          24 QGuiApplicationPrivate::processKeyEvent qguiapplication.cpp 2016 0x8c1c0ac
          25 QGuiApplicationPrivate::processWindowSystemEvent qguiapplication.cpp 1693 0x8c1adc8
          26 QWindowSystemInterface::sendWindowSystemEvents qwindowsysteminterface.cpp 659 0x8c0cee2
          27 QWindowsGuiEventDispatcher::sendPostedEvents qwindowsguieventdispatcher.cpp 82 0x1f60569d
          28 qt_internal_proc(HWND__ *, unsigned int, unsigned int, long) *16 qeventdispatcher_win.cpp 443 0x1cd8f6a
          29 USER32!SetManipulationInputTarget 0x7466d2b3
          30 USER32!DispatchMessageW 0x7464e88a
          31 USER32!DispatchMessageW 0x7464e1e4
          32 USER32!DispatchMessageW 0x7464dfa0
          33 QEventDispatcherWin32::processEvents qeventdispatcher_win.cpp 844 0x1cda4f6
          34 QWindowsGuiEventDispatcher::processEvents qwindowsguieventdispatcher.cpp 74 0x1f605659
          35 QEventLoop::processEvents qeventloop.cpp 134 0x1c8a364
          36 QEventLoop::exec qeventloop.cpp 212 0x1c8a614
          37 QDialog::exec qdialog.cpp 552 0x14f3adfd
          38 MainWindow::on_actionFix_Friend_in_DB_triggered mainwindow.cpp 211 0x408e67
          39 MainWindow::qt_static_metacall moc_mainwindow.cpp 85 0x424813
          40 MainWindow::qt_metacall moc_mainwindow.cpp 117 0x424906
          41 QMetaObject::metacall qmetaobject.cpp 301 0x1c91322
          42 QMetaObject::activate qobject.cpp 3755 0x1cb582d
          43 QMetaObject::activate qobject.cpp 3602 0x1cb50a2
          44 QAction::triggered moc_qaction.cpp 369 0x14d24983
          45 QAction::activate qaction.cpp 1170 0x14d23c32
          46 QAction::event qaction.cpp 1098 0x14d23a14
          47 QApplicationPrivate::notify_helper qapplication.cpp 3799 0x14d2fb70
          48 QApplication::notify qapplication.cpp 3159 0x14d2d143
          49 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x1c8c6e7
          50 QCoreApplication::sendEvent qcoreapplication.h 231 0x8f38105
          51 QShortcutMap::dispatchEvent qshortcutmap.cpp 674 0x8c4763b
          52 QShortcutMap::tryShortcut qshortcutmap.cpp 351 0x8c46906
          53 QWindowSystemInterface::handleShortcutEvent qwindowsysteminterface.cpp 235 0x8c0b8f6
          54 QGuiApplicationPrivate::processKeyEvent qguiapplication.cpp 2002 0x8c1bfc8
          55 QGuiApplicationPrivate::processWindowSystemEvent qguiapplication.cpp 1693 0x8c1adc8
          56 QWindowSystemInterface::sendWindowSystemEvents qwindowsysteminterface.cpp 659 0x8c0cee2
          57 QWindowsGuiEventDispatcher::sendPostedEvents qwindowsguieventdispatcher.cpp 82 0x1f60569d
          58 qt_internal_proc(HWND__ *, unsigned int, unsigned int, long) *16 qeventdispatcher_win.cpp 443 0x1cd8f6a
          59 USER32!SetManipulationInputTarget 0x7466d2b3
          60 USER32!DispatchMessageW 0x7464e88a
          61 USER32!DispatchMessageW 0x7464e1e4
          62 USER32!DispatchMessageW 0x7464dfa0
          63 QEventDispatcherWin32::processEvents qeventdispatcher_win.cpp 844 0x1cda4f6
          64 QWindowsGuiEventDispatcher::processEvents qwindowsguieventdispatcher.cpp 74 0x1f605659
          65 QEventLoop::processEvents qeventloop.cpp 134 0x1c8a364
          66 QEventLoop::exec qeventloop.cpp 212 0x1c8a614
          67 QCoreApplication::exec qcoreapplication.cpp 1261 0x1c8cd69
          68 QGuiApplication::exec qguiapplication.cpp 1633 0x8c1ac2c
          69 QApplication::exec qapplication.cpp 2975 0x14d2cc0b
          70 main main.cpp 14 0x403964

          A 1 Reply Last reply
          0
          • G gabor53

            @VRonin
            Yes.
            1 myDelegate::createEditor mydelegate.cpp 16 0x41c31f
            2 QAbstractItemViewPrivate::editor qabstractitemview.cpp 4199 0x14f94af1
            3 QAbstractItemViewPrivate::openEditor qabstractitemview.cpp 4384 0x14f95895
            4 QAbstractItemView::edit qabstractitemview.cpp 2676 0x14f8fa8e
            5 QAbstractItemView::edit qabstractitemview.cpp 1201 0x14f8acf5
            6 QAbstractItemView::closeEditor qabstractitemview.cpp 2852 0x14f904de
            7 QAbstractItemView::qt_static_metacall moc_qabstractitemview.cpp 421 0x14f964de
            8 QMetaObject::activate qobject.cpp 3740 0x1cb5782
            9 QMetaObject::activate qobject.cpp 3602 0x1cb50a2
            10 QAbstractItemDelegate::closeEditor moc_qabstractitemdelegate.cpp 204 0x14fcec46
            11 QAbstractItemDelegatePrivate::editorEventFilter qabstractitemdelegate.cpp 477 0x14fcdf28
            12 QStyledItemDelegate::eventFilter qstyleditemdelegate.cpp 583 0x14ff872d
            13 QCoreApplicationPrivate::sendThroughObjectEventFilters qcoreapplication.cpp 1099 0x1c8ca0e
            14 QApplicationPrivate::notify_helper qapplication.cpp 3795 0x14d2fb50
            15 QApplication::notify qapplication.cpp 3181 0x14d2d24c
            16 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x1c8c6e7
            17 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 234 0x150ac865
            18 QWidgetWindow::handleKeyEvent qwidgetwindow.cpp 656 0x14d7fe17
            19 QWidgetWindow::event qwidgetwindow.cpp 232 0x14d7e741
            20 QApplicationPrivate::notify_helper qapplication.cpp 3799 0x14d2fb70
            21 QApplication::notify qapplication.cpp 3159 0x14d2d143
            22 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x1c8c6e7
            23 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 234 0x8f380ad
            24 QGuiApplicationPrivate::processKeyEvent qguiapplication.cpp 2016 0x8c1c0ac
            25 QGuiApplicationPrivate::processWindowSystemEvent qguiapplication.cpp 1693 0x8c1adc8
            26 QWindowSystemInterface::sendWindowSystemEvents qwindowsysteminterface.cpp 659 0x8c0cee2
            27 QWindowsGuiEventDispatcher::sendPostedEvents qwindowsguieventdispatcher.cpp 82 0x1f60569d
            28 qt_internal_proc(HWND__ *, unsigned int, unsigned int, long) *16 qeventdispatcher_win.cpp 443 0x1cd8f6a
            29 USER32!SetManipulationInputTarget 0x7466d2b3
            30 USER32!DispatchMessageW 0x7464e88a
            31 USER32!DispatchMessageW 0x7464e1e4
            32 USER32!DispatchMessageW 0x7464dfa0
            33 QEventDispatcherWin32::processEvents qeventdispatcher_win.cpp 844 0x1cda4f6
            34 QWindowsGuiEventDispatcher::processEvents qwindowsguieventdispatcher.cpp 74 0x1f605659
            35 QEventLoop::processEvents qeventloop.cpp 134 0x1c8a364
            36 QEventLoop::exec qeventloop.cpp 212 0x1c8a614
            37 QDialog::exec qdialog.cpp 552 0x14f3adfd
            38 MainWindow::on_actionFix_Friend_in_DB_triggered mainwindow.cpp 211 0x408e67
            39 MainWindow::qt_static_metacall moc_mainwindow.cpp 85 0x424813
            40 MainWindow::qt_metacall moc_mainwindow.cpp 117 0x424906
            41 QMetaObject::metacall qmetaobject.cpp 301 0x1c91322
            42 QMetaObject::activate qobject.cpp 3755 0x1cb582d
            43 QMetaObject::activate qobject.cpp 3602 0x1cb50a2
            44 QAction::triggered moc_qaction.cpp 369 0x14d24983
            45 QAction::activate qaction.cpp 1170 0x14d23c32
            46 QAction::event qaction.cpp 1098 0x14d23a14
            47 QApplicationPrivate::notify_helper qapplication.cpp 3799 0x14d2fb70
            48 QApplication::notify qapplication.cpp 3159 0x14d2d143
            49 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x1c8c6e7
            50 QCoreApplication::sendEvent qcoreapplication.h 231 0x8f38105
            51 QShortcutMap::dispatchEvent qshortcutmap.cpp 674 0x8c4763b
            52 QShortcutMap::tryShortcut qshortcutmap.cpp 351 0x8c46906
            53 QWindowSystemInterface::handleShortcutEvent qwindowsysteminterface.cpp 235 0x8c0b8f6
            54 QGuiApplicationPrivate::processKeyEvent qguiapplication.cpp 2002 0x8c1bfc8
            55 QGuiApplicationPrivate::processWindowSystemEvent qguiapplication.cpp 1693 0x8c1adc8
            56 QWindowSystemInterface::sendWindowSystemEvents qwindowsysteminterface.cpp 659 0x8c0cee2
            57 QWindowsGuiEventDispatcher::sendPostedEvents qwindowsguieventdispatcher.cpp 82 0x1f60569d
            58 qt_internal_proc(HWND__ *, unsigned int, unsigned int, long) *16 qeventdispatcher_win.cpp 443 0x1cd8f6a
            59 USER32!SetManipulationInputTarget 0x7466d2b3
            60 USER32!DispatchMessageW 0x7464e88a
            61 USER32!DispatchMessageW 0x7464e1e4
            62 USER32!DispatchMessageW 0x7464dfa0
            63 QEventDispatcherWin32::processEvents qeventdispatcher_win.cpp 844 0x1cda4f6
            64 QWindowsGuiEventDispatcher::processEvents qwindowsguieventdispatcher.cpp 74 0x1f605659
            65 QEventLoop::processEvents qeventloop.cpp 134 0x1c8a364
            66 QEventLoop::exec qeventloop.cpp 212 0x1c8a614
            67 QCoreApplication::exec qcoreapplication.cpp 1261 0x1c8cd69
            68 QGuiApplication::exec qguiapplication.cpp 1633 0x8c1ac2c
            69 QApplication::exec qapplication.cpp 2975 0x14d2cc0b
            70 main main.cpp 14 0x403964

            A Offline
            A Offline
            ambershark
            wrote on last edited by
            #8

            @gabor53 So your mydelegate class is crashing, can we see the code for that?

            My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

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

              in particular myDelegate::createEditor

              "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

              G 1 Reply Last reply
              0
              • VRoninV VRonin

                in particular myDelegate::createEditor

                G Offline
                G Offline
                gabor53
                wrote on last edited by VRonin
                #10

                @VRonin
                Here it is:

                #include "mydelegate.h"
                #include "imagepickbutton.h"
                #include "imagedelegate.h"
                
                
                myDelegate::myDelegate(QObject *parent):QStyledItemDelegate (parent)
                {
                }
                
                
                
                QWidget *myDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
                {
                    Q_UNUSED(option);
                
                    if((index.column () == 1))
                        {
                            QLineEdit *editor = new QLineEdit(parent);
                            editor->setFrame (true);
                            editor->setStyleSheet ("background-color:rgb(255,217,229)");
                            editor->resize (100,20);
                            editor->sizeHint ();
                
                //            connect(editor,&QLineEdit::editingFinished,this,&myDelegate::commitAndCloseEditor);
                            return editor;
                        }
                
                    if((index.column () == 2))
                        {
                            QComboBox *comboEditor = new QComboBox(parent);
                            comboEditor->setFrame (true);
                            comboEditor->setEditable (true);
                            comboEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                
                            QSqlQuery query_loadWhat ("SELECT What FROM What_Table ORDER BY What asc",db);
                
                            while (query_loadWhat.next ())
                                {
                                    QString  whatItem = query_loadWhat.value (0).toString ();
                                    comboEditor->addItem (whatItem);
                                }
                
                            return comboEditor;
                        }
                
                
                
                    if((index.column () == 3))//image
                        {
                
                
                            return new ImagePickButton(parent);
                
                        }
                
                    if(index.column () == 8)//Signed
                        {
                            QComboBox *comboSignedEdit = new QComboBox(parent);
                            comboSignedEdit->setFrame (true);
                            comboSignedEdit->setEditable (true);
                
                            comboSignedEdit->setStyleSheet ("background-color:rgb(255,217,229)");
                            QSqlQuery query_loadSigned ("SELECT Signedby FROM Signed_Table ORDER BY Signedby asc",db);
                
                            while (query_loadSigned.next ())
                                {
                                    QString  SignedItem = query_loadSigned.value (0).toString ();
                                    comboSignedEdit->addItem (SignedItem);
                                }
                            return comboSignedEdit;
                        }
                
                    if (index.column () == 9)//History
                        {
                            QTextEdit *historyEditor = new QTextEdit(parent);
                            historyEditor->frameRect ();
                            historyEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                            return historyEditor;
                        }
                
                    if(index.column () == 10) //Age
                        {
                            QLineEdit *editor = new QLineEdit(parent);
                            editor->setFrame (true);
                            editor->setStyleSheet ("background-color:rgb(255,217,229)");
                            editor->resize (100,20);
                            editor->sizeHint ();
                            return editor;
                        }
                
                
                    QTextEdit *notesEditor = new QTextEdit(parent);
                    notesEditor->frameRect ();
                    notesEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                
                    return notesEditor;
                }
                
                
                void myDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
                {
                    QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
                
                    if(edit)
                        {
                            edit->setText (index.model ()->data (index,Qt::EditRole).toString ());
                            QVariant z(index.data (Qt::DisplayRole));
                            QString text;
                            text = z.toString ();
                            qDebug() << "edit: " << text;
                            return;
                
                        }
                
                    QDateEdit *dateEditor = qobject_cast<QDateEdit*>(editor);
                    if(dateEditor)
                        {
                            dateEditor->setDate (index.model ()->data (index, Qt::EditRole).toDate ());
                
                            dateEditor->setDate (QDate::fromString (index.model()->data (index,Qt::EditRole).toString (),"MM/dd/yyyy"));
                
                            QVariant d(index.data (Qt::EditRole));
                            qDebug() << "QVariant adoption date: " << d;
                
                            ImagePickButton* imgPick = qobject_cast<ImagePickButton*>(editor);
                            Q_ASSERT(imgPick);
                            imgPick->setSelectedFile(index.data(Qt::UserRole).toString());
                
                            return;
                        }
                
                
                
                
                
                
                
                    if((index.column () == 4))//material
                        {
                            QComboBox *comboMaterialEdit = new QComboBox();
                            comboMaterialEdit->setFrame (true);
                            comboMaterialEdit->setEditable (true);
                            comboMaterialEdit->setStyleSheet ("background-color:rgb(255,217,229)");
                
                            QSqlQuery query_loadMaterial ("SELECT Material FROM MaterialTable ORDER BY Material asc",db);
                
                            while (query_loadMaterial.next ())
                                {
                                    QString  whatItem = query_loadMaterial.value (0).toString ();
                                    comboMaterialEdit->addItem (whatItem);
                                }
                
                            return;
                        }
                
                    if((index.column() == 5))//color
                        {
                            QComboBox *comboColorEdit = new QComboBox();
                            comboColorEdit->setFrame (true);
                            comboColorEdit->setEditable (true);
                            comboColorEdit->setStyleSheet ("background-color:rgb(255,217,229)");
                
                            QSqlQuery query_loadColor ("SELECT Color FROM ColorTable ORDER BY Color asc",db);
                
                            while (query_loadColor.next ())
                                {
                                    QString  whatItem = query_loadColor.value (0).toString ();
                                    comboColorEdit->addItem (whatItem);
                                }
                
                            return;
                        }
                
                    if(index.column () == 6)//Description
                        {
                            QTextEdit *textEditor = new QTextEdit();
                            textEditor->frameRect ();
                            textEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                
                            return;
                        }
                
                    if(index.column () == 7)//Date
                        {
                            QDateEdit *deditor = new QDateEdit();
                            deditor->setDisplayFormat ("MM/dd/yyyy");
                            deditor->setCalendarPopup (true);
                            deditor->setStyleSheet ("background-color:rgb(255,217,229)");
                //            connect(deditor,&QDateEdit::editingFinished ,this,&myDelegate::commitAndCloseEditor );
                
                            return;
                        }
                
                
                    QComboBox *comboEditor = qobject_cast<QComboBox*>(editor);
                    if(comboEditor)
                        {
                            comboEditor->setCurrentText ((index.model ()->data (index, Qt::EditRole).toString ()));
                        }
                
                    QTextEdit *textEditor = qobject_cast<QTextEdit*>(editor);
                    if(textEditor)
                        {
                            textEditor->setText ((index.model ()->data (index, Qt::EditRole).toString ()));
                        }
                
                
                
                
                }
                
                void myDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
                {
                    QSqlQuery fixquery;
                    int colset = index.column ();
                
                    switch(colset)
                        {
                        case 1://Name
                        {
                            QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                
                            QString fixID;
                            QVariant v(updateIndex.data (Qt::DisplayRole));
                            fixID = v.toString ();
                            qDebug() << "FixID: " << fixID;
                
                            model->setData (index,edit->text ());
                            QVariant f(index.data(Qt::DisplayRole));
                            QString modified;
                            modified = f.toString ();
                            qDebug() << "Modified: " << modified;
                
                            fixquery.prepare("UPDATE Items SET Name = :Name WHERE ID = :fixID");
                            fixquery.bindValue (":Name", modified);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                            break;
                        }
                
                        case 2://What
                        {
                            QComboBox *comboEdit = qobject_cast<QComboBox*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                
                            QString fixID;
                            QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                            fixID = w.toString (); //turning index data ID from QVariant to string
                            qDebug() << "FixID: " << fixID;  //getting ID
                
                            QString saveWhat;
                            saveWhat = comboEdit->currentText ();
                            model->setData (index,saveWhat);
                            QVariant ws(index.data (Qt::DisplayRole));
                
                            saveWhat = ws.toString ();
                            saveWhat = saveWhat.simplified ();
                            qDebug() << "saveWhat: " << saveWhat;
                
                            fixquery.prepare("UPDATE Items SET What = :What WHERE ID = :fixID");
                            fixquery.bindValue (":What", saveWhat);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                
                            fixquery.prepare ("INSERT OR IGNORE INTO What_Table (What)"
                                              "VALUES(:What)");
                            fixquery.bindValue (":What",saveWhat);
                            fixquery.exec ();
                            break;
                        }
                        case 3: //image
                        {
                
                
                
                
                
                
                
                
                
                            break;
                        }
                        case 4://material
                        {
                            QComboBox *comboMat = qobject_cast<QComboBox*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                
                            QString fixID;
                            QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                            fixID = w.toString (); //turning index data ID from QVariant to string
                            qDebug() << "FixID: " << fixID;  //getting ID
                
                            QString saveMat;
                            saveMat = comboMat->currentText ();
                            model->setData (index,saveMat);
                            QVariant mat(index.data (Qt::DisplayRole));
                            saveMat = mat.toString ();
                            saveMat = saveMat.simplified ();
                            qDebug() << "saveMat: " << saveMat;
                
                            fixquery.prepare("UPDATE Items SET Material = :Material WHERE ID = :fixID");
                            fixquery.bindValue (":Material", saveMat);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                
                            fixquery.prepare ("INSERT OR IGNORE INTO MaterialTable (Material)"
                                              "VALUES(:Material)");
                            fixquery.bindValue (":Material",saveMat);
                            fixquery.exec ();
                
                            break;
                        }
                        case 5://color
                        {
                            QComboBox *comboColor = qobject_cast<QComboBox*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                
                            QString fixID;
                            QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                            fixID = w.toString (); //turning index data ID from QVariant to string
                            qDebug() << "FixID: " << fixID;  //getting ID
                
                            QString saveColor;
                            saveColor = comboColor->currentText ();
                            model->setData (index,saveColor);
                            QVariant mat(index.data (Qt::DisplayRole));
                            saveColor = mat.toString ();
                            saveColor = saveColor.simplified ();
                            qDebug() << "saveMat: " << saveColor;
                
                            fixquery.prepare("UPDATE Items SET Color = :Color WHERE ID = :fixID");
                            fixquery.bindValue (":Color", saveColor);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                
                            fixquery.prepare ("INSERT OR IGNORE INTO ColorTable (Color)"
                                              "VALUES(:Color)");
                            fixquery.bindValue (":Color",saveColor);
                            fixquery.exec ();
                
                            break;
                        }
                        case 6: //description
                        {
                            QTextEdit *tedit = qobject_cast<QTextEdit*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                
                            QString fixID;
                            QVariant v(updateIndex.data (Qt::DisplayRole));
                            fixID = v.toString ();
                            qDebug() << "FixID: " << fixID;
                
                            QString descString;
                            descString = tedit->toPlainText ();
                            model->setData (index,descString);
                            QVariant desc(index.data(Qt::DisplayRole));
                            QString DescModified;
                            DescModified = desc.toString ();
                            qDebug() << "Description: " << DescModified;
                
                            fixquery.prepare("UPDATE Items SET Description = :Description WHERE ID = :fixID");
                            fixquery.bindValue (":Description", DescModified);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                            break;
                        }
                        case 7://date
                        {
                
                            QDateEdit *dateEdit = qobject_cast<QDateEdit*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                
                            QString fixID;
                            QVariant v(updateIndex.data (Qt::DisplayRole));
                            fixID = v.toString ();
                            qDebug() << "FixID: " << fixID;
                
                            model->setData (index,dateEdit->date ().toString ("MM/dd/yyyy"),Qt::EditRole);
                            QVariant d(index.data (Qt::EditRole));
                            QString modDate;
                            modDate = d.toString ();
                            qDebug() << "modDate: " << modDate;
                
                            fixquery.prepare("UPDATE Items SET AdoptDate = :AdoptDate WHERE ID = :fixID");
                            fixquery.bindValue (":AdoptDate", modDate);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                
                            break;
                        }
                        case 8://Signed by
                        {
                            QComboBox *comboSigned = qobject_cast<QComboBox*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                
                            QString fixID;
                            QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                            fixID = w.toString (); //turning index data ID from QVariant to string
                            qDebug() << "FixID: " << fixID;  //getting ID
                
                            QString saveSigned;
                            saveSigned = comboSigned->currentText ();
                            model->setData (index,saveSigned);
                            QVariant sign(index.data (Qt::DisplayRole));
                            saveSigned = sign.toString ();
                            saveSigned = saveSigned.simplified ();
                            qDebug() << "saveMat: " << saveSigned;
                
                            fixquery.prepare("UPDATE Items SET Signed = :Signed WHERE ID = :fixID");
                            fixquery.bindValue (":Signed", saveSigned);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                
                            fixquery.prepare ("INSERT OR IGNORE INTO Signed_Table (Signedby)"
                                              "VALUES(:Signedby)");
                            fixquery.bindValue (":Color",saveSigned);
                            fixquery.exec ();
                
                            break;
                        }
                        case 9://History
                        {
                            QTextEdit *histEdit = qobject_cast<QTextEdit*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                
                            QString fixID;
                            QVariant v(updateIndex.data (Qt::DisplayRole));
                            fixID = v.toString ();
                            qDebug() << "FixID: " << fixID;
                
                            QString histString;
                            histString = histEdit->toPlainText ();
                            model->setData (index,histString);
                            QVariant hist(index.data(Qt::DisplayRole));
                            QString histModified;
                            histModified = hist.toString ();
                            qDebug() << "History: " << histModified;
                            qDebug() << "Db connection names (history):" << db.connectionName ();
                
                            fixquery.prepare("UPDATE Items SET History = :History WHERE ID = :fixID");
                            fixquery.bindValue (":History", histModified);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                            break;
                        }
                        case 10://Age
                        {
                            QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                
                            QString fixID;
                            QVariant v(updateIndex.data (Qt::DisplayRole));
                            fixID = v.toString ();
                            qDebug() << "FixID: " << fixID;
                
                            model->setData (index,edit->text ());
                            QVariant a(index.data(Qt::DisplayRole));
                            QString modAge;
                            modAge = a.toString ();
                            qDebug() << "Modified: " << modAge;
                
                            fixquery.prepare("UPDATE Items SET Age = :Age WHERE ID = :fixID");
                            fixquery.bindValue (":Age", modAge);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                            break;
                        }
                        case 11: //notes
                        {
                            QTextEdit *noteEdit = qobject_cast<QTextEdit*>(editor);
                            QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                
                            QString fixID;
                            QVariant v(updateIndex.data (Qt::DisplayRole));
                            fixID = v.toString ();
                            qDebug() << "FixID: " << fixID;
                
                            QString noteString;
                            noteString = noteEdit->toPlainText ();
                            model->setData (index,noteString);
                            QVariant n(index.data(Qt::DisplayRole));
                            QString noteModified;
                            noteModified = n.toString ();
                            qDebug() << "History: " << noteModified;
                
                            fixquery.prepare("UPDATE Items SET Notes = :Notes WHERE ID = :fixID");
                            fixquery.bindValue (":Notes", noteModified);
                            fixquery.bindValue (":fixID",fixID);
                            fixquery.exec ();
                            break;
                
                        }
                        }
                
                }
                
                void myDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
                {
                    Q_UNUSED(index);
                
                    editor->setGeometry (option.rect);
                }
                
                QSize myDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
                {
                    Q_UNUSED(option);
                
                    QVariant value = index.data(Qt::SizeHintRole);
                
                
                }
                
                void myDelegate::commitAndCloseEditor()
                {
                    qDebug() << "Commit and close works!";
                    QLineEdit *editor = qobject_cast<QLineEdit*>(sender());
                
                    emit commitData(editor);
                    emit closeEditor(editor);
                
                    QDateEdit *deditor = qobject_cast<QDateEdit*>(sender ());
                    emit commitData (deditor);
                    emit closeEditor (deditor);
                
                }
                
                QByteArray myDelegate::getNewPix()
                {
                    {
                        qDebug() << "Entered getNewPix!";
                        QString sPath = "C:/";
                
                        //    fileDialog = getOpenFileName (Q_NULLPTR,sPath);
                
                
                        const QString fileName = QFileDialog::getOpenFileName(Q_NULLPTR,
                                                 tr("Finding Friend's replacement Image"),sPath, tr("Image Files (*.png *.jpg *.bmp)"));
                
                
                        if(fileName == "")
                            {
                                qDebug() << "No image was chosen.";
                            }
                        else
                            {
                                qDebug() << "Image was chosen!";
                            }
                
                        QFile file(fileName);
                
                    }
                
                }
                
                QString myDelegate::getText()
                {
                    QString Test;
                    Test = "This is a test!";
                    return Test;
                }
                
                A 1 Reply Last reply
                0
                • G gabor53

                  @VRonin
                  Here it is:

                  #include "mydelegate.h"
                  #include "imagepickbutton.h"
                  #include "imagedelegate.h"
                  
                  
                  myDelegate::myDelegate(QObject *parent):QStyledItemDelegate (parent)
                  {
                  }
                  
                  
                  
                  QWidget *myDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
                  {
                      Q_UNUSED(option);
                  
                      if((index.column () == 1))
                          {
                              QLineEdit *editor = new QLineEdit(parent);
                              editor->setFrame (true);
                              editor->setStyleSheet ("background-color:rgb(255,217,229)");
                              editor->resize (100,20);
                              editor->sizeHint ();
                  
                  //            connect(editor,&QLineEdit::editingFinished,this,&myDelegate::commitAndCloseEditor);
                              return editor;
                          }
                  
                      if((index.column () == 2))
                          {
                              QComboBox *comboEditor = new QComboBox(parent);
                              comboEditor->setFrame (true);
                              comboEditor->setEditable (true);
                              comboEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                  
                              QSqlQuery query_loadWhat ("SELECT What FROM What_Table ORDER BY What asc",db);
                  
                              while (query_loadWhat.next ())
                                  {
                                      QString  whatItem = query_loadWhat.value (0).toString ();
                                      comboEditor->addItem (whatItem);
                                  }
                  
                              return comboEditor;
                          }
                  
                  
                  
                      if((index.column () == 3))//image
                          {
                  
                  
                              return new ImagePickButton(parent);
                  
                          }
                  
                      if(index.column () == 8)//Signed
                          {
                              QComboBox *comboSignedEdit = new QComboBox(parent);
                              comboSignedEdit->setFrame (true);
                              comboSignedEdit->setEditable (true);
                  
                              comboSignedEdit->setStyleSheet ("background-color:rgb(255,217,229)");
                              QSqlQuery query_loadSigned ("SELECT Signedby FROM Signed_Table ORDER BY Signedby asc",db);
                  
                              while (query_loadSigned.next ())
                                  {
                                      QString  SignedItem = query_loadSigned.value (0).toString ();
                                      comboSignedEdit->addItem (SignedItem);
                                  }
                              return comboSignedEdit;
                          }
                  
                      if (index.column () == 9)//History
                          {
                              QTextEdit *historyEditor = new QTextEdit(parent);
                              historyEditor->frameRect ();
                              historyEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                              return historyEditor;
                          }
                  
                      if(index.column () == 10) //Age
                          {
                              QLineEdit *editor = new QLineEdit(parent);
                              editor->setFrame (true);
                              editor->setStyleSheet ("background-color:rgb(255,217,229)");
                              editor->resize (100,20);
                              editor->sizeHint ();
                              return editor;
                          }
                  
                  
                      QTextEdit *notesEditor = new QTextEdit(parent);
                      notesEditor->frameRect ();
                      notesEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                  
                      return notesEditor;
                  }
                  
                  
                  void myDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
                  {
                      QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
                  
                      if(edit)
                          {
                              edit->setText (index.model ()->data (index,Qt::EditRole).toString ());
                              QVariant z(index.data (Qt::DisplayRole));
                              QString text;
                              text = z.toString ();
                              qDebug() << "edit: " << text;
                              return;
                  
                          }
                  
                      QDateEdit *dateEditor = qobject_cast<QDateEdit*>(editor);
                      if(dateEditor)
                          {
                              dateEditor->setDate (index.model ()->data (index, Qt::EditRole).toDate ());
                  
                              dateEditor->setDate (QDate::fromString (index.model()->data (index,Qt::EditRole).toString (),"MM/dd/yyyy"));
                  
                              QVariant d(index.data (Qt::EditRole));
                              qDebug() << "QVariant adoption date: " << d;
                  
                              ImagePickButton* imgPick = qobject_cast<ImagePickButton*>(editor);
                              Q_ASSERT(imgPick);
                              imgPick->setSelectedFile(index.data(Qt::UserRole).toString());
                  
                              return;
                          }
                  
                  
                  
                  
                  
                  
                  
                      if((index.column () == 4))//material
                          {
                              QComboBox *comboMaterialEdit = new QComboBox();
                              comboMaterialEdit->setFrame (true);
                              comboMaterialEdit->setEditable (true);
                              comboMaterialEdit->setStyleSheet ("background-color:rgb(255,217,229)");
                  
                              QSqlQuery query_loadMaterial ("SELECT Material FROM MaterialTable ORDER BY Material asc",db);
                  
                              while (query_loadMaterial.next ())
                                  {
                                      QString  whatItem = query_loadMaterial.value (0).toString ();
                                      comboMaterialEdit->addItem (whatItem);
                                  }
                  
                              return;
                          }
                  
                      if((index.column() == 5))//color
                          {
                              QComboBox *comboColorEdit = new QComboBox();
                              comboColorEdit->setFrame (true);
                              comboColorEdit->setEditable (true);
                              comboColorEdit->setStyleSheet ("background-color:rgb(255,217,229)");
                  
                              QSqlQuery query_loadColor ("SELECT Color FROM ColorTable ORDER BY Color asc",db);
                  
                              while (query_loadColor.next ())
                                  {
                                      QString  whatItem = query_loadColor.value (0).toString ();
                                      comboColorEdit->addItem (whatItem);
                                  }
                  
                              return;
                          }
                  
                      if(index.column () == 6)//Description
                          {
                              QTextEdit *textEditor = new QTextEdit();
                              textEditor->frameRect ();
                              textEditor->setStyleSheet ("background-color:rgb(255,217,229)");
                  
                              return;
                          }
                  
                      if(index.column () == 7)//Date
                          {
                              QDateEdit *deditor = new QDateEdit();
                              deditor->setDisplayFormat ("MM/dd/yyyy");
                              deditor->setCalendarPopup (true);
                              deditor->setStyleSheet ("background-color:rgb(255,217,229)");
                  //            connect(deditor,&QDateEdit::editingFinished ,this,&myDelegate::commitAndCloseEditor );
                  
                              return;
                          }
                  
                  
                      QComboBox *comboEditor = qobject_cast<QComboBox*>(editor);
                      if(comboEditor)
                          {
                              comboEditor->setCurrentText ((index.model ()->data (index, Qt::EditRole).toString ()));
                          }
                  
                      QTextEdit *textEditor = qobject_cast<QTextEdit*>(editor);
                      if(textEditor)
                          {
                              textEditor->setText ((index.model ()->data (index, Qt::EditRole).toString ()));
                          }
                  
                  
                  
                  
                  }
                  
                  void myDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
                  {
                      QSqlQuery fixquery;
                      int colset = index.column ();
                  
                      switch(colset)
                          {
                          case 1://Name
                          {
                              QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                  
                              QString fixID;
                              QVariant v(updateIndex.data (Qt::DisplayRole));
                              fixID = v.toString ();
                              qDebug() << "FixID: " << fixID;
                  
                              model->setData (index,edit->text ());
                              QVariant f(index.data(Qt::DisplayRole));
                              QString modified;
                              modified = f.toString ();
                              qDebug() << "Modified: " << modified;
                  
                              fixquery.prepare("UPDATE Items SET Name = :Name WHERE ID = :fixID");
                              fixquery.bindValue (":Name", modified);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                              break;
                          }
                  
                          case 2://What
                          {
                              QComboBox *comboEdit = qobject_cast<QComboBox*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                  
                              QString fixID;
                              QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                              fixID = w.toString (); //turning index data ID from QVariant to string
                              qDebug() << "FixID: " << fixID;  //getting ID
                  
                              QString saveWhat;
                              saveWhat = comboEdit->currentText ();
                              model->setData (index,saveWhat);
                              QVariant ws(index.data (Qt::DisplayRole));
                  
                              saveWhat = ws.toString ();
                              saveWhat = saveWhat.simplified ();
                              qDebug() << "saveWhat: " << saveWhat;
                  
                              fixquery.prepare("UPDATE Items SET What = :What WHERE ID = :fixID");
                              fixquery.bindValue (":What", saveWhat);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                  
                              fixquery.prepare ("INSERT OR IGNORE INTO What_Table (What)"
                                                "VALUES(:What)");
                              fixquery.bindValue (":What",saveWhat);
                              fixquery.exec ();
                              break;
                          }
                          case 3: //image
                          {
                  
                  
                  
                  
                  
                  
                  
                  
                  
                              break;
                          }
                          case 4://material
                          {
                              QComboBox *comboMat = qobject_cast<QComboBox*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                  
                              QString fixID;
                              QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                              fixID = w.toString (); //turning index data ID from QVariant to string
                              qDebug() << "FixID: " << fixID;  //getting ID
                  
                              QString saveMat;
                              saveMat = comboMat->currentText ();
                              model->setData (index,saveMat);
                              QVariant mat(index.data (Qt::DisplayRole));
                              saveMat = mat.toString ();
                              saveMat = saveMat.simplified ();
                              qDebug() << "saveMat: " << saveMat;
                  
                              fixquery.prepare("UPDATE Items SET Material = :Material WHERE ID = :fixID");
                              fixquery.bindValue (":Material", saveMat);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                  
                              fixquery.prepare ("INSERT OR IGNORE INTO MaterialTable (Material)"
                                                "VALUES(:Material)");
                              fixquery.bindValue (":Material",saveMat);
                              fixquery.exec ();
                  
                              break;
                          }
                          case 5://color
                          {
                              QComboBox *comboColor = qobject_cast<QComboBox*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                  
                              QString fixID;
                              QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                              fixID = w.toString (); //turning index data ID from QVariant to string
                              qDebug() << "FixID: " << fixID;  //getting ID
                  
                              QString saveColor;
                              saveColor = comboColor->currentText ();
                              model->setData (index,saveColor);
                              QVariant mat(index.data (Qt::DisplayRole));
                              saveColor = mat.toString ();
                              saveColor = saveColor.simplified ();
                              qDebug() << "saveMat: " << saveColor;
                  
                              fixquery.prepare("UPDATE Items SET Color = :Color WHERE ID = :fixID");
                              fixquery.bindValue (":Color", saveColor);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                  
                              fixquery.prepare ("INSERT OR IGNORE INTO ColorTable (Color)"
                                                "VALUES(:Color)");
                              fixquery.bindValue (":Color",saveColor);
                              fixquery.exec ();
                  
                              break;
                          }
                          case 6: //description
                          {
                              QTextEdit *tedit = qobject_cast<QTextEdit*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                  
                              QString fixID;
                              QVariant v(updateIndex.data (Qt::DisplayRole));
                              fixID = v.toString ();
                              qDebug() << "FixID: " << fixID;
                  
                              QString descString;
                              descString = tedit->toPlainText ();
                              model->setData (index,descString);
                              QVariant desc(index.data(Qt::DisplayRole));
                              QString DescModified;
                              DescModified = desc.toString ();
                              qDebug() << "Description: " << DescModified;
                  
                              fixquery.prepare("UPDATE Items SET Description = :Description WHERE ID = :fixID");
                              fixquery.bindValue (":Description", DescModified);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                              break;
                          }
                          case 7://date
                          {
                  
                              QDateEdit *dateEdit = qobject_cast<QDateEdit*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                  
                              QString fixID;
                              QVariant v(updateIndex.data (Qt::DisplayRole));
                              fixID = v.toString ();
                              qDebug() << "FixID: " << fixID;
                  
                              model->setData (index,dateEdit->date ().toString ("MM/dd/yyyy"),Qt::EditRole);
                              QVariant d(index.data (Qt::EditRole));
                              QString modDate;
                              modDate = d.toString ();
                              qDebug() << "modDate: " << modDate;
                  
                              fixquery.prepare("UPDATE Items SET AdoptDate = :AdoptDate WHERE ID = :fixID");
                              fixquery.bindValue (":AdoptDate", modDate);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                  
                              break;
                          }
                          case 8://Signed by
                          {
                              QComboBox *comboSigned = qobject_cast<QComboBox*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                  
                              QString fixID;
                              QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                              fixID = w.toString (); //turning index data ID from QVariant to string
                              qDebug() << "FixID: " << fixID;  //getting ID
                  
                              QString saveSigned;
                              saveSigned = comboSigned->currentText ();
                              model->setData (index,saveSigned);
                              QVariant sign(index.data (Qt::DisplayRole));
                              saveSigned = sign.toString ();
                              saveSigned = saveSigned.simplified ();
                              qDebug() << "saveMat: " << saveSigned;
                  
                              fixquery.prepare("UPDATE Items SET Signed = :Signed WHERE ID = :fixID");
                              fixquery.bindValue (":Signed", saveSigned);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                  
                              fixquery.prepare ("INSERT OR IGNORE INTO Signed_Table (Signedby)"
                                                "VALUES(:Signedby)");
                              fixquery.bindValue (":Color",saveSigned);
                              fixquery.exec ();
                  
                              break;
                          }
                          case 9://History
                          {
                              QTextEdit *histEdit = qobject_cast<QTextEdit*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                  
                              QString fixID;
                              QVariant v(updateIndex.data (Qt::DisplayRole));
                              fixID = v.toString ();
                              qDebug() << "FixID: " << fixID;
                  
                              QString histString;
                              histString = histEdit->toPlainText ();
                              model->setData (index,histString);
                              QVariant hist(index.data(Qt::DisplayRole));
                              QString histModified;
                              histModified = hist.toString ();
                              qDebug() << "History: " << histModified;
                              qDebug() << "Db connection names (history):" << db.connectionName ();
                  
                              fixquery.prepare("UPDATE Items SET History = :History WHERE ID = :fixID");
                              fixquery.bindValue (":History", histModified);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                              break;
                          }
                          case 10://Age
                          {
                              QLineEdit *edit = qobject_cast<QLineEdit*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                  
                              QString fixID;
                              QVariant v(updateIndex.data (Qt::DisplayRole));
                              fixID = v.toString ();
                              qDebug() << "FixID: " << fixID;
                  
                              model->setData (index,edit->text ());
                              QVariant a(index.data(Qt::DisplayRole));
                              QString modAge;
                              modAge = a.toString ();
                              qDebug() << "Modified: " << modAge;
                  
                              fixquery.prepare("UPDATE Items SET Age = :Age WHERE ID = :fixID");
                              fixquery.bindValue (":Age", modAge);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                              break;
                          }
                          case 11: //notes
                          {
                              QTextEdit *noteEdit = qobject_cast<QTextEdit*>(editor);
                              QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));
                  
                              QString fixID;
                              QVariant v(updateIndex.data (Qt::DisplayRole));
                              fixID = v.toString ();
                              qDebug() << "FixID: " << fixID;
                  
                              QString noteString;
                              noteString = noteEdit->toPlainText ();
                              model->setData (index,noteString);
                              QVariant n(index.data(Qt::DisplayRole));
                              QString noteModified;
                              noteModified = n.toString ();
                              qDebug() << "History: " << noteModified;
                  
                              fixquery.prepare("UPDATE Items SET Notes = :Notes WHERE ID = :fixID");
                              fixquery.bindValue (":Notes", noteModified);
                              fixquery.bindValue (":fixID",fixID);
                              fixquery.exec ();
                              break;
                  
                          }
                          }
                  
                  }
                  
                  void myDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
                  {
                      Q_UNUSED(index);
                  
                      editor->setGeometry (option.rect);
                  }
                  
                  QSize myDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
                  {
                      Q_UNUSED(option);
                  
                      QVariant value = index.data(Qt::SizeHintRole);
                  
                  
                  }
                  
                  void myDelegate::commitAndCloseEditor()
                  {
                      qDebug() << "Commit and close works!";
                      QLineEdit *editor = qobject_cast<QLineEdit*>(sender());
                  
                      emit commitData(editor);
                      emit closeEditor(editor);
                  
                      QDateEdit *deditor = qobject_cast<QDateEdit*>(sender ());
                      emit commitData (deditor);
                      emit closeEditor (deditor);
                  
                  }
                  
                  QByteArray myDelegate::getNewPix()
                  {
                      {
                          qDebug() << "Entered getNewPix!";
                          QString sPath = "C:/";
                  
                          //    fileDialog = getOpenFileName (Q_NULLPTR,sPath);
                  
                  
                          const QString fileName = QFileDialog::getOpenFileName(Q_NULLPTR,
                                                   tr("Finding Friend's replacement Image"),sPath, tr("Image Files (*.png *.jpg *.bmp)"));
                  
                  
                          if(fileName == "")
                              {
                                  qDebug() << "No image was chosen.";
                              }
                          else
                              {
                                  qDebug() << "Image was chosen!";
                              }
                  
                          QFile file(fileName);
                  
                      }
                  
                  }
                  
                  QString myDelegate::getText()
                  {
                      QString Test;
                      Test = "This is a test!";
                      return Test;
                  }
                  
                  A Offline
                  A Offline
                  ambershark
                  wrote on last edited by
                  #11

                  @gabor53 I don't see anything obvious in the code. It looks ok.

                  What does the debugger say as you step through that createEditor? Is your pointer to parent ok? Not null? Points at a valid QObject? You reference index, is index.isValid() true?

                  Exactly what line does it crash on in the debugger?

                  My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

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

                    if(index.column()== inside a delegate is always bad design. could you step through with a debugger to see where it breaks? could you also post the constructor of ImagePickButton?

                    "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

                    G 1 Reply Last reply
                    1
                    • VRoninV VRonin

                      if(index.column()== inside a delegate is always bad design. could you step through with a debugger to see where it breaks? could you also post the constructor of ImagePickButton?

                      G Offline
                      G Offline
                      gabor53
                      wrote on last edited by
                      #13

                      @VRonin
                      I deleted the build folder and reran qmake and build. Now the program crashes and gives a SIGSEGV error when execution reaches this section of the code:

                       case 4://material
                              {
                                  QComboBox *comboMat = qobject_cast<QComboBox*>(editor);
                                  QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                      
                                  QString fixID;
                                  QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                                  fixID = w.toString (); //turning index data ID from QVariant to string
                                  qDebug() << "FixID: " << fixID;  //getting ID
                      
                                  QString saveMat;
                                  saveMat = comboMat->currentText ();
                                  model->setData (index,saveMat);
                                  QVariant mat(index.data (Qt::DisplayRole));
                                  saveMat = mat.toString ();
                                  saveMat = saveMat.simplified ();
                                  qDebug() << "saveMat: " << saveMat;
                      
                                  fixquery.prepare("UPDATE Items SET Material = :Material WHERE ID = :fixID");
                                  fixquery.bindValue (":Material", saveMat);
                                  fixquery.bindValue (":fixID",fixID);
                                  fixquery.exec ();
                      
                                  fixquery.prepare ("INSERT OR IGNORE INTO MaterialTable (Material)"
                                                    "VALUES(:Material)");
                                  fixquery.bindValue (":Material",saveMat);
                                  fixquery.exec ();
                      
                                  break;
                              }
                      

                      It stops at this line:

                      saveMat = comboMat->currentText ();
                      

                      Where should if(index.column()== go?
                      Thank you.

                      A 1 Reply Last reply
                      0
                      • G gabor53

                        @VRonin
                        I deleted the build folder and reran qmake and build. Now the program crashes and gives a SIGSEGV error when execution reaches this section of the code:

                         case 4://material
                                {
                                    QComboBox *comboMat = qobject_cast<QComboBox*>(editor);
                                    QModelIndex updateIndex(index.model ()->index(index.row (),0,index.parent ()));//setting index to ID
                        
                                    QString fixID;
                                    QVariant w(updateIndex.data (Qt::DisplayRole));//getting data from index location
                                    fixID = w.toString (); //turning index data ID from QVariant to string
                                    qDebug() << "FixID: " << fixID;  //getting ID
                        
                                    QString saveMat;
                                    saveMat = comboMat->currentText ();
                                    model->setData (index,saveMat);
                                    QVariant mat(index.data (Qt::DisplayRole));
                                    saveMat = mat.toString ();
                                    saveMat = saveMat.simplified ();
                                    qDebug() << "saveMat: " << saveMat;
                        
                                    fixquery.prepare("UPDATE Items SET Material = :Material WHERE ID = :fixID");
                                    fixquery.bindValue (":Material", saveMat);
                                    fixquery.bindValue (":fixID",fixID);
                                    fixquery.exec ();
                        
                                    fixquery.prepare ("INSERT OR IGNORE INTO MaterialTable (Material)"
                                                      "VALUES(:Material)");
                                    fixquery.bindValue (":Material",saveMat);
                                    fixquery.exec ();
                        
                                    break;
                                }
                        

                        It stops at this line:

                        saveMat = comboMat->currentText ();
                        

                        Where should if(index.column()== go?
                        Thank you.

                        A Offline
                        A Offline
                        ambershark
                        wrote on last edited by
                        #14

                        @gabor53 More than likely comboMat is invalid at that point. Either it's null or a dangling pointer. Or it was an uninitialized one.

                        Either way it's a bad pointer. Confirm in the debugger then dig through your code to find out why.

                        My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

                        1 Reply Last reply
                        1
                        • dheerendraD dheerendra

                          It is correct. I don't see any issue. Also can try not passing the this as parent to delegate. Also whether both the delegates work if you specify them individually

                          Bharath_pthinksB Offline
                          Bharath_pthinksB Offline
                          Bharath_pthinks
                          wrote on last edited by
                          #15

                          @dheerendra said in Assigning ItemDelegates to different columns in a view:

                          It is correct. I don't see any issue. Also can try not passing the this as parent to delegate. Also whether both the delegates work if you specify them individually

                          Regards,
                          Bharath Renukaswsamy
                          PthinkS – “We are the Qt-QML Developers”

                          m l +91 990 100 2299, off l +91 876 233 1536 l Skype - bharath.r26 l
                          u l www.pthinks.com, e l bharath@pthinks.com, info@pthinks.com, l

                          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