c++实现QTableView中放入QLineEdit默认不可以编辑,双击后才可以编辑
时间: 2024-03-06 14:46:44 浏览: 45
可以通过自定义 `QStyledItemDelegate` 类并重写其 `createEditor` 函数,将 `QLineEdit` 和 `QTableView` 结合使用来实现默认不可编辑,双击后可编辑的效果。具体实现可以参考以下示例代码:
```c++
class Delegate : public QStyledItemDelegate {
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
QLineEdit *editor = new QLineEdit(parent);
editor->setReadOnly(true);
connect(editor, &QLineEdit::mouseDoubleClickEvent, [=]() {
editor->setReadOnly(false);
});
return editor;
}
};
// ...
QTableView *tableView = new QTableView();
QStandardItemModel *model = new QStandardItemModel(3, 3);
tableView->setModel(model);
tableView->setItemDelegate(new Delegate());
// ...
```
在上述代码中,首先创建了一个名为 `Delegate` 的自定义 `QStyledItemDelegate` 类,并重写了其 `createEditor` 函数。在该函数中,首先创建了一个名为 `editor` 的 `QLineEdit` 对象,并设置其初始状态为只读。然后通过 `connect` 函数连接了 `editor` 的 `mouseDoubleClickEvent` 信号和一个 lambda 表达式。该 lambda 表达式中调用了 `editor` 的 `setReadOnly(false)` 函数,即当用户双击该单元格时,将 `editor` 的 `readOnly` 属性设置为 `false`,这样用户就可以编辑其中的文本了。
接下来,创建了一个名为 `tableView` 的 `QTableView` 对象,并通过 `setModel` 函数将其与一个名为 `model` 的 `QStandardItemModel` 对象关联起来。然后通过 `setItemDelegate` 函数将 `tableView` 的代理设置为 `Delegate` 对象,这样 `tableView` 中的每个单元格都会使用 `Delegate` 来显示和编辑其中的文本。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)