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();
原文來自微信公眾號"程序員成長日志",已經工作的程序員朋友可以關注下,分享日常工作中解決的問題即可賺取稿費,大家一起成長~

