只是一个快速简单(也许)的问题:
如何防止对 a 进行编辑以QTreeWidgetItem
允许空字符串?
目前,我使用QTreeWidgetItem::itemChanged(QTreeWidgetItem*, int)
检查修改,当然,我可以只检查一个空字符串,但我没有以前的文本。所以我只能设置“默认” QString
,但这很糟糕......
谢谢和干杯!
只是一个快速简单(也许)的问题:
如何防止对 a 进行编辑以QTreeWidgetItem
允许空字符串?
目前,我使用QTreeWidgetItem::itemChanged(QTreeWidgetItem*, int)
检查修改,当然,我可以只检查一个空字符串,但我没有以前的文本。所以我只能设置“默认” QString
,但这很糟糕......
谢谢和干杯!
我建议为您的树小部件使用项目委托来处理可能的用户输入。下面是简化的解决方案。
项目委托的实现:
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();