我自己从QItemDelegate继承了一个EditorDelegate 代理
QWidget *EditorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  if(index.column() == 1)
    {
    QDateTimeEdit *editor = new QDateTimeEdit(parent);
    editor->setDisplayFormat("yyyy/M/dd");
    editor->setCalendarPopup(true);
    return editor;
  }
  else if(index.column() == 2)
  {
   QSpinBox *editor = new QSpinBox(parent);
   editor->setMinimum(140);
   editor->setMaximum(200);
   return editor;
  }
  else if(index.column() == 3)
  {
   QComboBox *editor = new QComboBox(parent);
   QStringList str;
   str<<tr("北京")<<tr("上海")<<tr("深圳");
   editor->addItems(str);
   return editor;
  }
  else
      return QItemDelegate::createEditor(parent,option,index);
}
void EditorDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
 if(index.column() == 1)
    {
   QDateTimeEdit *dateEdit = qobject_cast<QDateTimeEdit *>(editor);
   if(dateEdit)
       dateEdit->setDate(QDate::fromString(index.model()->data(index,Qt::EditRole).toString(),"yyyy/M/d"));
 }
 else if(index.column() == 2)
 {
  QSpinBox *spinEditor = qobject_cast<QSpinBox *>(editor);
  if(spinEditor)
      spinEditor->setValue(index.model()->data(index,Qt::EditRole).toInt());
 }
 else if(index.column() == 2)
 {
     QComboBox *comboEditor = qobject_cast<QComboBox *>(editor);
     if(comboEditor)
     {
         int i = comboEditor->findText(index.model()->data(index,Qt::EditRole).toString());
     comboEditor->setCurrentIndex(i);
     }
 }
 else
     return QItemDelegate::setEditorData(editor,index);
}
...
...
...
.
在main函数中直接使用QTableWidget 能显示出数据代码如下:
但是我在设计器中添加一个QTableWidget   
然后再设置代理后却什么也显示不出来。请问这是什么原因???
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 QTableWidget   tableWidget(4,4);
   EditorDelegate delegate;
   QStringList headers;
   headers<<QObject::tr("姓名")<<QObject::tr("出身日期")<<QObject::tr("身高")<<QObject::tr("籍贯");
   tableWidget.setHorizontalHeaderLabels(headers);
   tableWidget.setItemDelegate(&delegate);
   tableWidget.setItem(0,0,new QTableWidgetItem(QObject::tr("张1")));
   tableWidget.setItem(1,0,new QTableWidgetItem(QObject::tr("张2")));
   tableWidget.setItem(2,0,new QTableWidgetItem(QObject::tr("张3")));
   tableWidget.setItem(3,0,new QTableWidgetItem(QObject::tr("张4")));
   tableWidget.setItem(0,1,new QTableWidgetItem(QObject::tr("1986/6/6")));
   tableWidget.setItem(1,1,new QTableWidgetItem(QObject::tr("1985/5/5")));
   tableWidget.setItem(2,1,new QTableWidgetItem(QObject::tr("1987/8/8")));
   tableWidget.setItem(3,1,new QTableWidgetItem(QObject::tr("1949/10/1")));
   tableWidget.setItem(0,2,new QTableWidgetItem(QObject::tr("165")));
   tableWidget.setItem(1,2,new QTableWidgetItem(QObject::tr("170")));
   tableWidget.setItem(2,2,new QTableWidgetItem(QObject::tr("175")));
   tableWidget.setItem(3,2,new QTableWidgetItem(QObject::tr("180")));
   tableWidget.setItem(0,3,new QTableWidgetItem(QObject::tr("上海")));
   tableWidget.setItem(1,3,new QTableWidgetItem(QObject::tr("北京")));
   tableWidget.setItem(2,3,new QTableWidgetItem(QObject::tr("北京")));
   tableWidget.setItem(3,3,new QTableWidgetItem(QObject::tr("深圳")));
   tableWidget.show();
}