Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: t34 от Декабрь 23, 2008, 10:35



Название: QTreeWidget переименование элемента
Отправлено: t34 от Декабрь 23, 2008, 10:35
Здравствуйте.
У меня возникла следующаа проблемма: есть QTreeWidget, на него кидаются item'ы, для которых сделано:
Код
C++ (Qt)
item->setFlags(item->flags() | Qt::ItemIsEditable);
 
мы можем изменить текст элемента покликав по нему, нажав F2 или сделав treeWidget->editItem(item);
Вопрос: как сделать что бы при вводе пустой строки элемент не переименовывался?


Название: Re: QTreeWidget переименование элемента
Отправлено: ритт от Декабрь 23, 2008, 10:41
думаю, проще всего будет повесить на вьюху (или на определённый столбец) делегат, в котором в начале редактирования запоминать старое значение, а при передаче значения модели проверять на корректность и в случае некорректного значения подставлять вместо него ранее сохранённое.


Название: Re: QTreeWidget переименование элемента
Отправлено: BRE от Декабрь 23, 2008, 12:55
Здравствуйте.
У меня возникла следующаа проблемма: есть QTreeWidget, на него кидаются item'ы, для которых сделано:
Код
C++ (Qt)
item->setFlags(item->flags() | Qt::ItemIsEditable);
 
мы можем изменить текст элемента покликав по нему, нажав F2 или сделав treeWidget->editItem(item);
Вопрос: как сделать что бы при вводе пустой строки элемент не переименовывался?
Если использовать наследника от QTreeWidgetItem, то в нем можно переопределить метод:
virtual void setData ( int column, int role, const QVariant & value ).
И в нем отслеживать пустую строку.
Но все таки лучше сразу сделать делегата, как предложил Константин. При необходимости будет легче перейти на view-model.


Название: Re: QTreeWidget переименование элемента
Отправлено: serg_hd от Февраль 08, 2010, 17:13
не знаю, сделал простым слотом:
Код
Java
oldTxt = Item.text(0);
itemsTree.editItem(Item);
itemsTree.itemChanged.connect(this, "func(QTreeWidgetItem,Integer)");
 
public void func(QTreeWidgetItem item, Integer num)
{
 if (item.text(num).equals("")) item.setText(num, oldTxt);
}
 
п.с. скажите, пожалст, кто-нибудь что такое делегаты, зачем они? Примерчики бы...