我自己从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();
}