Russian Qt Forum
Сентябрь 30, 2024, 16:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeWidget переименование элемента  (Прочитано 4513 раз)
t34
Гость
« : Декабрь 23, 2008, 10:35 »

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

думаю, проще всего будет повесить на вьюху (или на определённый столбец) делегат, в котором в начале редактирования запоминать старое значение, а при передаче значения модели проверять на корректность и в случае некорректного значения подставлять вместо него ранее сохранённое.
Записан
BRE
Гость
« Ответ #2 : Декабрь 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.
« Последнее редактирование: Декабрь 23, 2008, 13:00 от BRE » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Февраль 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);
}
 
п.с. скажите, пожалст, кто-нибудь что такое делегаты, зачем они? Примерчики бы...
Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.398 секунд. Запросов: 22.