Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Assigning ItemDelegates to different columns in a view
Qt 6.11 is out! See what's new in the release blog

Assigning ItemDelegates to different columns in a view

Scheduled Pinned Locked Moved Unsolved General and Desktop
15 Posts 5 Posters 2.0k 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
    #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
                      • Unsolved