1

我正在使用信息亭系统,并且正在使用虚拟键盘。通过扩展委托并传回我自己的本地 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 调用者时它变得空白。我还没有找到让它正常工作的方法。

4

0 回答 0