QTableWidget单元格使用自定义的lineEdit控件导致不能选中
使用自定义委托解决
1.自定义委托
class LineEditDelegate : public QItemDelegate
{
Q_OBJECT public:
LineEditDelegate(QObject *parent = 0);
//重写以下方法 //创建编辑器,当视图需要一个编辑器时会告知委托为被修改的项目提供一个编辑器部件,此时会调用此方法
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
//为编辑器设置数据,将模型中的数据设置到编辑器中
void setEditorData(QWidget *editor, const QModelIndex &index) const;
//将数据写入到模型中,当用户编辑完成后把编辑器中的数据写入到模型中
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
//更新编辑器几何布局
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
LineEditDelegate::LineEditDelegate(QObject *parent)
: QItemDelegate(parent)
{
} QWidget *LineEditDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
LonLatLineEdit *editor = new LonLatLineEdit(parent); return editor;
} void LineEditDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
LonLatLineEdit *widget = static_cast<LonLatLineEdit*>(editor);
widget->setText(value);
} void LineEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
LonLatLineEdit *widget = static_cast<LonLatLineEdit*>(editor);
widget->trans();
QString value = widget->text();
model->setData(index, value, Qt::EditRole);
} void LineEditDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
2.QTableWidget整行设置代理
ui.tableWidget_node->setItemDelegateForColumn(1,new LineEditDelegate); 设置数据
ui.tableWidget_node->setItem(row, 1, new QTableWidgetItem(temp));
获取数据
QString text = ui.tableWidget_node->item(row, 1)->text();
原文来自微信公众号"程序员成长日志",已经工作的程序员朋友可以关注下,分享日常工作中解决的问题即可赚取稿费,大家一起成长~