我正在使用信息亭系统,并且正在使用虚拟键盘。通过扩展委托并传回我自己的本地 QLineEdit,可以很好地编辑我的 QTreeView 中的字段。我可以在虚拟键盘上键入并且 QLineEdit 被正确填充,并从单元格中获取焦点调用委托的 destroyEditor(),我从编辑器中获取文本并更新单元格项目,以便当 QLineEdit 消失时,我看到正确的文本。
我需要在这里进行一些更改。当我单击该项目时,我想用一些起始文本填充它,当我单击远离该项目然后单击它时,我不希望它为空白,但我希望它继续显示文本在应用编辑器之前在单元格中。
在 createEditor() 中,我添加了以下更改:
QWidget* IconFileSystemRenameDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
m_editor->setParent(parent);
const QFileSystemModel* model = static_cast<const QFileSystemModel*>(index.model());
m_keyboard->focusThis(m_editor);
// NOTE: Added this block:
// if text exists in New Name cell, keep that for editing, otherwise start with original name as text
QString plugThis = model->fileName(model->index(0,4,model->parent(index)));
if (plugThis.length() == 0)
plugThis = model->fileName(model->index(0,0,model->parent(index)));
m_editor->setText(plugThis);
QString plugged = m_editor->text();
// set editor visible
m_editor->setVisible(true);
return m_editor;
}
这基本上相当于检查第 4 列中的单元格是否已更改且不为空(最终我还需要确保它不是起始文本)。如果改变了,那么我想获取那个单元格的内容,更新编辑器,然后返回它
但是当我第一次单击单元格的编辑模式时,没有显示起始文本(我正在尝试编辑的文件名),当我将文本添加到编辑器并单击然后重新单击时,编辑器不会'不显示我的文本,即使在这两种情况下我都可以调试以查看文本实际上已被应用。
似乎在传递回 Qt 调用者时它变得空白。我还没有找到让它正常工作的方法。