Beispiel #1
0
bool DB2TableModel::load(const QString &filename)
{
    bool ret = true;
    QFile f(filename);

    if (!f.open(QIODevice::ReadOnly))
        return false;

    char magic[5] = {0};
    f.read(magic, 4);

    if (QString(magic) == "WDB2")
    {
        clearDbInfo();

        DB2Header hdr;
        memset(&hdr, 0, sizeof(DB2Header));

        f.seek(0);
        f.read((char*)&hdr, sizeof(DB2Header));

        loadDB2(&hdr, &f);
    }
    else if (QString(magic) == "WDBC")
    {
        clearDbInfo();
        DBCHeader hdr;
        memset(&hdr, 0, sizeof(DBCHeader));

        f.seek(0);
        f.read((char*)&hdr, sizeof(DBCHeader));

        loadDBC(&hdr, &f);
    }
    else
    {
        return false;
    }

    defDlg->fillDefenition(filename, dbbuild);
    if (defDlg->exec() == QDialog::Accepted)
    {
        QAbstractTableModel::beginResetModel();
        QStandardItemModel *st = defDlg->defenition();
        for (int i = 0; i < st->rowCount(); i++)
        {
            if (i < fieldCount)
            {
                fieldsOffsets[i].title = st->data(st->index(i, 0)).toString();
                fieldsOffsets[i].type = (FldType)FindTypeForName(st->data(st->index(i, 1)).toString());
            }
        }
        QAbstractTableModel::endResetModel();
    }

    return ret;
}
Beispiel #2
0
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建标准项模型
    QStandardItemModel model;
    // 获取模型的根项(Root Item),根项是不可见的
    QStandardItem *parentItem = model.invisibleRootItem();

    // 创建标准项item0,并设置显示文本,图标和工具提示
    QStandardItem *item0 = new QStandardItem;
    item0->setText("A");
    QPixmap pixmap0(50,50);
    pixmap0.fill("red");
    item0->setIcon(QIcon(pixmap0));
    item0->setToolTip("indexA");
    // 将创建的标准项作为根项的子项
    parentItem->appendRow(item0);
    // 将创建的标准项作为新的父项
    parentItem = item0;

    // 创建新的标准项,它将作为item0的子项
    QStandardItem *item1 = new QStandardItem;
    item1->setText("B");
    QPixmap pixmap1(50,50);
    pixmap1.fill("blue");
    item1->setIcon(QIcon(pixmap1));
    item1->setToolTip("indexB");
    parentItem->appendRow(item1);

    // 创建新的标准项,这里使用了另一种方法来设置文本、图标和工具提示
    QStandardItem *item2 = new QStandardItem;
    QPixmap pixmap2(50,50);
    pixmap2.fill("green");
    item2->setData("C", Qt::EditRole);
    item2->setData("indexC", Qt::ToolTipRole);
    item2->setData(QIcon(pixmap2), Qt::DecorationRole);
    parentItem->appendRow(item2);

    // 在树视图中显示模型
    QTreeView view;
    view.setModel(&model);
    view.show();

    // 获取item0的索引并输出item0的子项数目,然后输出了item1的显示文本和工具提示
    QModelIndex indexA = model.index(0, 0, QModelIndex());
    qDebug() << "indexA row count: " << model.rowCount(indexA);
    QModelIndex indexB = model.index(0, 0, indexA);
    qDebug() << "indexB text: " << model.data(indexB, Qt::EditRole).toString();
    qDebug() << "indexB toolTip: " << model.data(indexB, Qt::ToolTipRole).toString();

    return app.exec();
}
Beispiel #3
0
/**
 * Sets the strings of the subwidgets using the current language.
 */
void DlgFilletEdges::changeEvent(QEvent *e)
{
    if (e->type() == QEvent::LanguageChange) {
        int index = ui->shapeObject->currentIndex();
        // only get the items from index 1 on since the first one will be added automatically
        int count = ui->shapeObject->count() - 1;
        QStringList text;
        QList<QVariant> data;
        for (int i=0; i<count; i++) {
            text << ui->shapeObject->itemText(i+1);
            data << ui->shapeObject->itemData(i+1);
        }

        ui->retranslateUi(this);
        for (int i=0; i<count; i++) {
            ui->shapeObject->addItem(text.at(i));
            ui->shapeObject->setItemData(i+1, data.at(i));
        }

        ui->shapeObject->setCurrentIndex(index);
        QStandardItemModel *model = qobject_cast<QStandardItemModel*>(ui->treeView->model());
        count = model->rowCount();
        for (int i=0; i<count; i++) {
            int id = model->data(model->index(i, 0), Qt::UserRole).toInt();
            model->setData(model->index(i, 0), QVariant(tr("Edge%1").arg(id)));
        }
    }
    else {
        QWidget::changeEvent(e);
    }
}
Beispiel #4
0
uint32 getProductBoxID(QComboBox* pBox, int32 index)
{
	QStandardItemModel* pProductModel =
		static_cast<QStandardItemModel*>(pBox->model());
	QModelIndex id_index = pProductModel->index(index, 0);
	return pProductModel->data(id_index).toUInt();
}
void OnyxMainWindow::showAllCites()
{
    QStandardItemModel model;
    QModelIndex selected = model.invisibleRootItem()->index();
    citeModel(model, selected);

    TreeViewDialog bookmark_view(this);
    bookmark_view.setModel(&model);
    QVector<int> percentages;
    percentages.push_back(80);
    percentages.push_back(20);
    bookmark_view.tree().setColumnWidth(percentages);

    int ret = bookmark_view.popup(QCoreApplication::tr("Citations"));
    // Returned from the bookmark view.
    onyx::screen::watcher().enqueue(this, onyx::screen::ScreenProxy::GC);
    this->update();

    if (ret != QDialog::Accepted)
    {
        onyx::screen::watcher().enqueue(this, onyx::screen::ScreenProxy::GU);
        return;
    }

    CRBookmark *pos = (CRBookmark *)(model.data(bookmark_view.selectedItem(), Qt::UserRole + 1).toInt());
    view_->goToBookmark(pos);
}
void OntologyClassView::mouseDoubleClickEvent(QMouseEvent *event){

//    QTreeView::mouseDoubleClickEvent(event);

    QModelIndex index = indexAt(event->pos());
    if(index.isValid()){
        QStandardItemModel *omodel = qobject_cast<QStandardItemModel*>(model());
        if(!omodel)
            return;

        QStandardItem *pItem = omodel->itemFromIndex(index);
        if(pItem){
            ClassDescriptionDialog *pClassDescriptionDialog = new ClassDescriptionDialog(this);
            QString classId = pItem->data(Qt::DisplayRole).toString();
            pClassDescriptionDialog->setClassId(classId);
            pClassDescriptionDialog->setupData();

            QModelIndex parentindex = index.parent();
            if(parentindex.isValid()){
                pClassDescriptionDialog->setParentClassId(omodel->data(parentindex).toString());
            }

            if(pClassDescriptionDialog->exec() == QDialog::Rejected){
//                QTreeView::mouseDoubleClickEvent(event);
                return;
            }

            QString className = pClassDescriptionDialog->classId();

            pItem->setData(className,Qt::DisplayRole);
            pItem->setData(className);

        }
    }
}
Beispiel #7
0
int main(int argc, char **argv) {
  QApplication app(argc, argv);

  QStandardItemModel model;
  QStandardItem *parentItem = model.invisibleRootItem();

  QStandardItem *item0 = new QStandardItem;
  item0->setText("A");
  QPixmap pixmap0(50, 50);
  pixmap0.fill("red");
  item0->setIcon(QIcon(pixmap0));
  item0->setToolTip("indexA");
  parentItem->appendRow(item0);

  parentItem = item0;
  QStandardItem *item1 = new QStandardItem;
  item1->setText("B");
  QPixmap pixmap1(50, 50);
  pixmap1.fill("blue");
  item1->setIcon(QIcon(pixmap1));
  item1->setToolTip("indexB");
  parentItem->appendRow(item1);

  QStandardItem *item2 = new QStandardItem;
  QPixmap pixmap2(50, 50);
  pixmap2.fill("green");
  item2->setData("C", Qt::EditRole);
  item2->setData("indexC", Qt::ToolTipRole);
  item2->setData(QIcon(pixmap2), Qt::DecorationRole);
  parentItem->appendRow(item2);

  QTreeView view;
  view.setModel(&model);
  view.show();

  QModelIndex indexA = model.index(0, 0, QModelIndex());
  qDebug() << "indexA row count: " << model.rowCount(indexA);
  QModelIndex indexB = model.index(0, 0, indexA);
  qDebug() << "indexB text: " << model.data(indexB, Qt::EditRole).toString();
  qDebug() << "indexB toolTip: " << model.data(indexB, Qt::ToolTipRole)
                                        .toString();

  return app.exec();
}
Beispiel #8
0
bool
CountingHelper::setTime( int row, double mass, std::shared_ptr< const adcontrols::MassSpectrometer > sp, QStandardItemModel& model )
{
    if ( sp ) {
        if ( auto scanlaw = sp->scanLaw() ) {
            double tof = scanlaw->getTime( mass, model.data( model.index( row, c_laps ) ).toInt() );
            model.setData( model.index( row, c_time ), tof * std::micro::den, Qt::EditRole );
        }
    }
    return true;
}
bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
    // Holen des Items
    QStandardItemModel* source = (QStandardItemModel*) sourceModel();
    QModelIndex index = source->index(sourceRow, 0, sourceParent);

    // Prüfen der Filterbedingungen
    if (maxSizeFilter)
        return (source->data(index, sizeRole).toInt() <= maxSize);
    return true;
}
Beispiel #10
0
void ModelsManager::flagChanged(const QModelIndex& idx)
{
    QAbstractItemView* view = static_cast<QAbstractItemView*>(sender());
    int row = idx.row();

    QStandardItemModel* model = m_models->modelForView(view);

    QStandardItem* item = model->item(row, 0);

    Register r;
    r.name = item->text();
    r.value = model->data(idx).toString();
    emit registerChanged(r);
}
QString ExpressionCompleter::pathFromIndex ( const QModelIndex & index ) const
{
    QStandardItemModel * m = static_cast<QStandardItemModel*>(model());

    if (m->data(index, Qt::UserRole).canConvert<App::ObjectIdentifier>()) {
        App::ObjectIdentifier p = m->data(index, Qt::UserRole).value<App::ObjectIdentifier>();
        QString pStr = Base::Tools::fromStdString(p.toString());

        QString parentStr;
        QModelIndex parent = index.parent();
        while (parent.isValid()) {
            QString thisParentStr = m->data(parent, Qt::UserRole).toString();

            parentStr = thisParentStr + parentStr;

            parent = parent.parent();
        }

        return parentStr + pStr;
    }
    else if (m->data(index, Qt::UserRole).canConvert<QString>()) {
        QModelIndex parent = index;
        QString parentStr;

        while (parent.isValid()) {
            QString thisParentStr = m->data(parent, Qt::UserRole).toString();

            parentStr = thisParentStr + parentStr;

            parent = parent.parent();
        }

        return parentStr;
    }
    else
        return QString();
}
Beispiel #12
0
void setProductBoxID(QComboBox* pBox, uint32 product_id)
{
	QStandardItemModel* pProductModel 
		= static_cast<QStandardItemModel*>(pBox->model());
	int32 rowCount = pProductModel->rowCount();
	for( int32 row = 0; row < rowCount; ++row )
	{
		QModelIndex id_index = pProductModel->index(row, 0);
		if( product_id == pProductModel->data(id_index).toUInt() )
		{
			pBox->setCurrentIndex(row);
			break;
		}
	}
}
void DataSetValuesView::dropEvent(QDropEvent *event)
{
   QStandardItemModel model;
   model.dropMimeData(event->mimeData(), Qt::CopyAction, 0,0, QModelIndex());

   int numRows = model.rowCount();
   for (int row = 0; row < numRows; ++row)
   {
      QModelIndex index = model.index(row, 0);
      DataClassAutoId_t id = model.data(index, Qt::UserRole).toUInt();
      m_bufferValues->ApplyInput(id);
   }
   event->acceptProposedAction();

}
void AssetsViewer::yearDateChanged(const QDate & year){
    double sumOfYearlyValues = 0.00;
    QString yearString = year.toString("yyyy");
    AssetsManager manager;
    QStandardItemModel *model = new QStandardItemModel(this);
    model = manager.getYearlyValues(year);
    if (WarnDebugMessage)
        qDebug() << __FILE__ << QString::number(__LINE__)<< "model in viewer = "<< model->rowCount();
    for (int i = 0; i < model->rowCount(); i += 1)
    {
        double yearlyValue = model->data(model->index(i,YEARLY_VALUE),Qt::DisplayRole).toDouble();
        if (WarnDebugMessage)
        qDebug() << __FILE__ << QString::number(__LINE__) << " yearlyValue =" << QString::number(yearlyValue) ;
        sumOfYearlyValues += yearlyValue;
        }
    QString textLabel = "Total value to declare for "+yearString+" = "+QString::number(sumOfYearlyValues);
    ui->declareLabel->setText(textLabel);
}
Beispiel #15
0
void OntologyClassView::onAddSiblingClass(){
    if(!OBJECTLEVELMANAGER->count())
        return;

    QModelIndex index = selectionModel()->currentIndex();
    if(!index.isValid())
        return;

    QStandardItemModel *omodel = qobject_cast<QStandardItemModel*>(model());
    if(!omodel)
        return;

    ClassDescriptionDialog *pClassDescriptionDialog = new ClassDescriptionDialog(this);

    pClassDescriptionDialog->setParentClassId(omodel->data(index.parent()).toString());

    if(pClassDescriptionDialog->exec() == QDialog::Rejected)
        return;

    QString classId = pClassDescriptionDialog->classId();

//    if(omodel->insertRows(omodel->rowCount(index.parent()),1,index.parent())){

        QStandardItem *pItem = new QStandardItem();
        pItem->setData(classId,Qt::DisplayRole);
        pItem->setData(classId);

        QList<QStandardItem*> parentItemList = omodel->findItems(pClassDescriptionDialog->parentClassId(),Qt::MatchExactly | Qt::MatchRecursive);
        if(!parentItemList.isEmpty())
        {
            QStandardItem *pParentItem = parentItemList.first();
            pParentItem->setChild(pParentItem->rowCount(),pItem);
        }else
            omodel->setItem(omodel->rowCount(index.parent()),pItem);

        setCurrentIndex(omodel->index(omodel->rowCount(index.parent()),0,index.parent()));
//    }
}
Beispiel #16
0
void OntologyClassView::onRemoveCurrentClass(){

    QModelIndex index = selectionModel()->currentIndex();
    if(!index.isValid())
        return;

    int ret  = QMessageBox::question(this,tr("Class delete"),tr("You are going to delete this Class, all sub classes and rules related to this class will be also deleted. If you want to delete this Class click Yes else click No."),QMessageBox::Yes,QMessageBox::No);
    if(ret == QMessageBox::No)
        return;

    if(ret == QMessageBox::Yes){
        QStandardItemModel *omodel = qobject_cast<QStandardItemModel*>(model());
        if(!omodel)
            return;

        QString id = omodel->data(index,Qt::DisplayRole).toString();
        OntologyClass *pClass = ONTOLOGYCLASSIFICATIONMANAGER->ontologyClassById(id);
        if(!pClass)
            return;

        if(pClass->childCount()){
            QMessageBox::critical(this,tr("Delete Failed"),tr("Failed to delete the class. Delete all sub classes first and then try again."));

            return;
        }

        OntologyClass *pParentClass = ONTOLOGYCLASSIFICATIONMANAGER->ontologyClassById(pClass->parentId());
        if(pParentClass)
            pParentClass->removeChild(pClass);

        pClass->clearFuzzyRuleHash();

        ONTOLOGYCLASSIFICATIONMANAGER->removeOntologyClass(pClass);

        omodel->removeRows(index.row(),1,index.parent());
    }
}
    model.setData( model.index( 0, 0 ), dt,               StartTimeRole );
    model.setData( model.index( 0, 0 ), dt.addDays( 17 ), EndTimeRole );

    model.setData( model.index( 2, 0 ), dt.addDays( 18 ), StartTimeRole );
    model.setData( model.index( 2, 0 ), dt.addDays( 19 ), EndTimeRole );

    Span s = grid.mapToChart( model.index( 0, 0 ) );
    //qDebug() << "span="<<s;

    assertTrue( s.start()>0 );
    assertTrue( s.length()>0 );

    grid.mapFromChart( s, model.index( 1, 0 ) );

    QDateTime s1 = model.data( model.index( 0, 0 ), StartTimeRole ).toDateTime();
    QDateTime e1 = model.data( model.index( 0, 0 ), EndTimeRole ).toDateTime();
    QDateTime s2 = model.data( model.index( 1, 0 ), StartTimeRole ).toDateTime();
    QDateTime e2 = model.data( model.index( 1, 0 ), EndTimeRole ).toDateTime();

    assertTrue( s1.isValid() );
    assertTrue( e1.isValid() );
    assertTrue( s2.isValid() );
    assertTrue( e2.isValid() );

    assertEqual( s1, s2 );
    assertEqual( e1, e2 );

    assertTrue( grid.isSatisfiedConstraint( Constraint( model.index( 0, 0 ), model.index( 2, 0 ) ) ) );
    assertFalse( grid.isSatisfiedConstraint( Constraint( model.index( 2, 0 ), model.index( 0, 0 ) ) ) );
Beispiel #18
0
void FilterDlgImpl::slot_filter()
{
	/*int flags = 0;
	flags |= (date_check->isChecked()) << 1;
	if(date_check->isChecked())
	   flags |= (whole_check_date->isChecked()) << 2;
	
	flags |= (count_check->isChecked()) << 3;
	if(count_check->isChecked())
	{
	    s = comboBox1->currentText();
	    
	    if(s == "<")
		    flags |= 1 << 4;
	    else if(s == "<=")
		    flags |= 1 << 5;
	    else if(s == ">")
		    flags |= 1 << 6;
	    else if(s == ">=")
		    flags |= 1 << 7;
	    else if(s == "=")
		    flags |= 1 << 8;
	    s = comboBox2->currentText();
	    
	    if(!s.isEmpty() && !linefind2->text().isEmpty())
	    {
		 if(s == "<")
		    flags |= 1 << 9;
	         else if(s == "<=")
		    flags |= 1 << 10;
	         else if(s == ">")
		    flags |= 1 << 11;
	         else if(s == ">=")
		    flags |= 1 << 12;
	    }
	}
	*/
	
    QStandardItemModel* model = (QStandardItemModel*)m_query->model();
	
	QString qery, sCondition1;
    int icur = m_typeTrasnaction->currentIndex();
	
    if( icur == 1 ) {
		qery = "(type_op like 'income')";
    } else if( icur == 2 ) {
        qery += " and (type_op like 'outgoes')";
    }

    //get date item
    sCondition1 = model->data(model->index(0,1), Qt::EditRole).toString();
    QString sPattern1 = model->data(model->index(0,2), Qt::EditRole).toString();
    QString sCondition2 = model->data(model->index(0,3), Qt::EditRole).toString();
    QString sPattern2 = model->data(model->index(0,4), Qt::EditRole).toString();
    sCondition1 = sCondition1.simplified();
    sCondition2 = sCondition2.simplified();
    sPattern2 = sPattern2.simplified();
    sPattern1 = sPattern1.simplified();
	     
    if((sCondition2 == ">") || (sCondition2 == "<=")) {
        sPattern2 += " 23:59";
    } else {
        sPattern2 += " 00:00";
    }
	     
    if((sCondition1 == ">") || (sCondition1 == "<=")) {
        sPattern1 += " 23:59";
    } else {
        sPattern1 += " 00:00";
    }

    sPattern2 = convert_date_format(sPattern2, false);
    sPattern1 = convert_date_format(sPattern1, false);
	     
    if (!sPattern1.isEmpty()) {
        qery += form_qery(sCondition1, sPattern1, "date_s");
    }

    if((!sPattern2.isEmpty()) && (!sCondition2.isEmpty()) && (sCondition1 != "=")) {
        qery += form_qery(sCondition2, sPattern2, "date_s");
    }

    sCondition1 = model->data(model->index(1,1), Qt::EditRole).toString();
    sPattern1 = model->data(model->index(1,2), Qt::EditRole).toString();
    sCondition2 = model->data(model->index(1,3), Qt::EditRole).toString();
    sPattern2 = model->data(model->index(1,4), Qt::EditRole).toString();
    sCondition1 = sCondition1.simplified();
    sCondition2 = sCondition2.simplified();
    sPattern2 = sPattern2.simplified();
    sPattern1 = sPattern1.simplified();

    if(!sPattern1.isEmpty()) {
        qery += form_qery(sCondition1, sPattern1, "count");
    }

    if((!sPattern2.isEmpty()) && (!sCondition2.isEmpty()) && (sCondition1 != "=")) {
        qery += form_qery(sCondition2, sPattern2, "count");
    }

    sPattern1 = model->data(model->index(2,1), Qt::EditRole).toString();
    if(!sPattern1.isEmpty()) {
        qery += " and (description like '%"+sPattern1+"%')";
    }

    if(qery.left(4) == " and") {
        qery.remove(0,5);
    }
	     
    m_query_string = qery;
	accept();
}
Beispiel #19
0
void OntologyClassView::onAddChildClass(){
    if(!OBJECTLEVELMANAGER->count())
    {
        return;
    }

    QStandardItemModel *omodel = qobject_cast<QStandardItemModel*>(model());
    if(!omodel)
        return;


    ClassDescriptionDialog *pClassDescriptionDialog = new ClassDescriptionDialog(this);

    QModelIndex index = selectionModel()->currentIndex();
    if(index.isValid()){
        pClassDescriptionDialog->setParentClassId(omodel->data(index).toString());
    }

    if(pClassDescriptionDialog->exec() == QDialog::Rejected)
        return;

    QString classId = pClassDescriptionDialog->classId();

    if(index.isValid()){

        QStandardItem *pItem = new QStandardItem();
        pItem->setData(classId,Qt::DisplayRole);
        pItem->setData(classId);

        OntologyClass *pClass = ONTOLOGYCLASSIFICATIONMANAGER->ontologyClassById(classId);
        if(pClass){

            QColor color = pClass->color();
            pItem->setData(color,Qt::DecorationRole);
        }

        QList<QStandardItem*> parentItemList = omodel->findItems(pClassDescriptionDialog->parentClassId(),Qt::MatchExactly | Qt::MatchRecursive);
        if(!parentItemList.isEmpty())
        {
            QStandardItem *pParentItem = parentItemList.first();
            pParentItem->setChild(pParentItem->rowCount(),pItem);
        }else
            omodel->setItem(omodel->rowCount(index),pItem);

        expand(index);

    }else{
        int childMax = omodel->rowCount();

        QStandardItem *pItem = new QStandardItem();
        pItem->setData(classId,Qt::DisplayRole);
        pItem->setData(classId);

        OntologyClass *pClass = ONTOLOGYCLASSIFICATIONMANAGER->ontologyClassById(classId);
        if(pClass){

            QColor color = pClass->color();
            pItem->setData(color,Qt::DecorationRole);
        }

        omodel->setItem(omodel->rowCount(),pItem);

        expand(index);

        setCurrentIndex(omodel->index(childMax,0));
    }


}
Beispiel #20
0
void tst_QItemDelegate::dateAndTimeEditorTest2()
{
    // prepare createeditor
    FastEditItemView w;
    QStandardItemModel s;
    s.setRowCount(2);
    s.setColumnCount(1);
    w.setModel(&s);
    ChooseEditorDelegate *d = new ChooseEditorDelegate(&w);
    w.setItemDelegate(d);
    const QTime time1(3, 13, 37);
    const QDate date1(2013, 3, 7);

    QPointer<QTimeEdit> timeEdit;
    QPointer<QDateEdit> dateEdit;
    QPointer<QDateTimeEdit> dateTimeEdit;

    // Do some checks
    // a. Open time editor on empty cell + write QTime data
    const QModelIndex i1 = s.index(0, 0);
    timeEdit = new QTimeEdit();
    d->setNextOpenEditor(timeEdit);
    QCOMPARE(w.fastEdit(i1), timeEdit.data());
    timeEdit->setTime(time1);
    d->setModelData(timeEdit, &s, i1);
    QCOMPARE(s.data(i1).type(), QVariant::Time); // ensure that we wrote a time variant.
    QCOMPARE(s.data(i1).toTime(), time1);        // ensure that it is the correct time.
    w.doCloseEditor(timeEdit);
    QVERIFY(d->currentEditor() == 0); // should happen at doCloseEditor. We only test this once.

    // b. Test that automatic edit of a QTime value is QTimeEdit (and not QDateTimeEdit)
    QWidget *editor = w.fastEdit(i1);
    timeEdit = qobject_cast<QTimeEdit*>(editor);
    QVERIFY(timeEdit);
    QCOMPARE(timeEdit->time(), time1);
    w.doCloseEditor(timeEdit);

    const QTime time2(4, 14, 37);
    const QDate date2(2014, 4, 7);
    const QDateTime datetime1(date1, time1);
    const QDateTime datetime2(date2, time2);

    // c. Test that the automatic open of an QDateTime is QDateTimeEdit + value check + set check
    s.setData(i1, datetime2);
    editor = w.fastEdit(i1);
    timeEdit = qobject_cast<QTimeEdit*>(editor);
    QVERIFY(timeEdit == 0);
    dateEdit = qobject_cast<QDateEdit*>(editor);
    QVERIFY(dateEdit == 0);
    dateTimeEdit =  qobject_cast<QDateTimeEdit*>(editor);
    QVERIFY(dateTimeEdit);
    QCOMPARE(dateTimeEdit->dateTime(), datetime2);
    dateTimeEdit->setDateTime(datetime1);
    d->setModelData(dateTimeEdit, &s, i1);
    QCOMPARE(s.data(i1).type(), QVariant::DateTime); // ensure that we wrote a datetime variant.
    QCOMPARE(s.data(i1).toDateTime(), datetime1);
    w.doCloseEditor(dateTimeEdit);

    // d. Open date editor on empty cell + write QDate data (similar to a)
    const QModelIndex i2 = s.index(1, 0);
    dateEdit = new QDateEdit();
    d->setNextOpenEditor(dateEdit);
    QCOMPARE(w.fastEdit(i2), dateEdit.data());
    dateEdit->setDate(date1);
    d->setModelData(dateEdit, &s, i2);
    QCOMPARE(s.data(i2).type(), QVariant::Date); // ensure that we wrote a time variant.
    QCOMPARE(s.data(i2).toDate(), date1);        // ensure that it is the correct date.
    w.doCloseEditor(dateEdit);

    // e. Test that the default editor editor (QDateEdit) on a QDate (index i2)  (similar to b)
    editor = w.fastEdit(i2);
    dateEdit = qobject_cast<QDateEdit*>(editor);
    QVERIFY(dateEdit);
    QCOMPARE(dateEdit->date(), date1);
    w.doCloseEditor(dateEdit);
}