Changed date is not shown in QStandardItemModel



  • Hi,
    I created an date editor in QDelegate CreateEditor like this:

                QDateEdit *deditor = new QDateEdit(parent);
                deditor->setDisplayFormat ("MM/dd/yyyy");
                deditor->setCalendarPopup (true);
                deditor->setStyleSheet ("background-color:rgb(255,217,229)");
                connect(deditor,&QDateEdit::editingFinished ,this,&myDelegate::commitAndCloseEditor );
    

    In setEditorData I have

        QDateEdit *dateEditor = qobject_cast<QDateEdit*>(editor);
        if(dateEditor)
            {
                dateEditor->setDate (index.model ()->data (index, Qt::EditRole).toDate ());
                QVariant d(index.data (Qt::DisplayRole));
                QDate fixdate;
                fixdate = d.toDate ();
                qDebug() << "fixdate: ";
                return;
            }
    

    In setModelData:

                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"));
    

    I get the following message in output:
    FixID: "3"
    fixdate:
    When I change the date in the editor it changes the month and the day but writes YYYY as a year. What did I miss?
    Thank you.


  • Qt Champions 2016

    Hi
    Is it correct that in setEditorData , you use
    setDate (index.model ()->data (index, Qt::EditRole) <<< Edit role
    but for data, you use
    d(index.data (Qt::DisplayRole)); << Display role
    ?

    Just a thought.



  • Hi @mrjj
    I changed it to

         dateEditor->setDate (index.model ()->data (index, Qt::EditRole).toDate ());
                QVariant d(index.data (Qt::EditRole));
    

    but the same thing happens.



  • @mrjj
    Even the QVariant is missing the year:

    QVariant:  QVariant(QString, "01/01/YYYY")
    

  • Qt Champions 2016

    You mean its truncated and only the last / is there but no "YYYY" or
    what is missing?
    If you use pure string ( not as date) does it work then?
    Im not sure if save/load data that is wrong og some convert to/from string with datatime.


  • Lifetime Qt Champion

    Hi,

    Your format is wrong: it's yyyy in lower case.



  • You should actually store the date as a QDate rather than a string and let displayText() in the delegate to take care to display it in the correct format



  • I will change it from text to date. Thank you.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.