qtableview文本编辑
qtableview文本编辑,qt,pyqt,qtableview,Qt,Pyqt,Qtableview,我正在用PyQt编写一个程序。我使用QTableView显示数据。 问题是,当我触发单元格的编辑(例如按F2键)时,默认情况下,单元格中的文本全部选中(高亮显示)。这不方便,因为我想修改文本,但不想全部重写。 所以我想知道是否有任何函数可以改变行为? 谢谢您需要实现一个委托,这样您就可以覆盖用于编辑该字段的小部件,以使用自定义编辑器小部件 默认情况下,QTableView将使用QTextEdit,您可以尝试对其进行子分类并更改其行为。我最好的猜测是,您需要操纵编辑器小部件上的焦点策略,可能是f
我正在用PyQt编写一个程序。我使用QTableView显示数据。
问题是,当我触发单元格的编辑(例如按F2键)时,默认情况下,单元格中的文本全部选中(高亮显示)。这不方便,因为我想修改文本,但不想全部重写。
所以我想知道是否有任何函数可以改变行为?
谢谢您需要实现一个委托,这样您就可以覆盖用于编辑该字段的小部件,以使用自定义编辑器小部件 默认情况下,QTableView将使用QTextEdit,您可以尝试对其进行子分类并更改其行为。我最好的猜测是,您需要操纵编辑器小部件上的焦点策略,可能是focusInEvent[1],以更改它接收焦点时的行为
[1] 不确定是否有更简单的方法,但您可以编写自己的项委托来创建QLineEdit。使用模型数据更新编辑器时,取消选择文本,并可能将光标移到开头。该委托应该是这样的(我现在没有可用的Qt安装,所以我无法测试它,但这个想法应该可行):
QWidget*MyDelegate::createEditor(QWidget*parent、,
常量QSTYLEOPTION视图项和选项,
常数QModelIndex和索引)常数
{
//只需创建一个纯直线编辑。
QLineEdit*编辑器=新的QLineEdit(父级);
返回编辑器;
}
void MyDelegate::setEditorData(QWidget*编辑器,
常数QModelIndex和索引)常数
{
//从模型中获取当前数据。
QString值=index.model()->数据(index,Qt::EditRole).toString();
//将行编辑文本设置为当前数据。
QLineEdit*lineEdit=static_cast(编辑器);
lineEdit->setText(值);
//取消选择文本。
lineEdit->deselect();
//将光标移到开头。
lineEdit->setCursorPosition(0);
}
void MyDelegate::setModelData(QWidget*编辑器,
QAbstrateModel*模型,
常数QModelIndex和索引)常数
{
//使用“行编辑”中的文本设置模型数据。
QLineEdit*lineEdit=static_cast(编辑器);
QString值=lineEdit.text();
模型->设置数据(索引、值、Qt::EditRole);
}
如果您以前没有在Qt文档中使用过委托,那么这里有一个有用的方法。非常感谢。帮助很大。
QWidget * MyDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & option,
const QModelIndex & index) const
{
// Just creates a plain line edit.
QLineEdit *editor = new QLineEdit(parent);
return editor;
}
void MyDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
// Fetch current data from model.
QString value = index.model()->data(index, Qt::EditRole).toString();
// Set line edit text to current data.
QLineEdit * lineEdit = static_cast<QLineEdit*>(editor);
lineEdit->setText(value);
// Deselect text.
lineEdit->deselect();
// Move the cursor to the beginning.
lineEdit->setCursorPosition(0);
}
void MyDelegate::setModelData(QWidget *editor,
QAbstractItemModel *model,
const QModelIndex &index) const
{
// Set the model data with the text in line edit.
QLineEdit * lineEdit = static_cast<QLineEdit*>(editor);
QString value = lineEdit.text();
model->setData(index, value, Qt::EditRole);
}