【问题标题】:QTreeWidget: renaming item to emptyQTreeWidget:将项目重命名为空
【发布时间】:2014-03-18 14:07:30
【问题描述】:

只是一个快速简单(也许)的问题:

如何防止对QTreeWidgetItem 的编辑允许空字符串?

目前,我使用QTreeWidgetItem::itemChanged(QTreeWidgetItem*, int) 来检查修改,当然,我可以只检查一个空字符串,但我没有以前的文本。所以我只能设置一个“默认”QString,但这很糟糕......

感谢和干杯!

【问题讨论】:

  • 使用 QTreeView 和例如QStandardItemModel(或任何其他模型)可以通过重新实现 QAbstractItemModel::setData() 来实现。
  • 有什么办法可以避免抽象视图,而只使用一个小部件?

标签: qt qtreewidget qtreewidgetitem


【解决方案1】:

我建议为您的树小部件使用项目委托来处理可能的用户输入。以下是简化的解决方案。

项目委托的实现:

class Delegate : public QItemDelegate
{
public:
    void setModelData(QWidget *editor, QAbstractItemModel *model,
                      const QModelIndex &index) const
    {
        QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor);
        if (!lineEdit->isModified()) {
            return;
        }
        QString text = lineEdit->text();
        text = text.trimmed();
        if (text.isEmpty()) {
            // If text is empty, do nothing - preserve the old value.
            return;
        } else {
            QItemDelegate::setModelData(editor, model, index);
        }
    }
};

使用可编辑项和自定义项委托实现简单树小部件:

QTreeWidget tw;
QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0,
                                            QStringList(QString("item 1")));
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);
tw.addTopLevelItem(item);
tw.setItemDelegate(new Delegate);
tw.show();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2011-07-15
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2020-09-27
    相关资源
    最近更新 更多