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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перетаскивание QTreeWidgetItem [решено]  (Прочитано 4886 раз)
dangreen
Гость
« : Ноябрь 14, 2011, 03:45 »

Как узнать когда QTreeWidgetItem перетащен,
Сигнал на начало перетаскивания (itemEntered(QTreeWidgetItem*)) есть, а на завершение не нашел.
Помогите найти решение, нужно чтоб по окончанию еще можно было найти индекс, родитель и текст айтема
« Последнее редактирование: Ноябрь 16, 2011, 13:11 от dangreen » Записан
dangreen
Гость
« Ответ #1 : Ноябрь 14, 2011, 13:53 »

Поможет кто?  Непонимающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Ноябрь 14, 2011, 15:54 »

унаследуйся от QTreeWidget и переопредели в нём void QTreeWidget::dropEvent ( QDropEvent * event ) [virtual protected]
Код
C++ (Qt)
void MyTreeWidget::dropEvent(QDropEvent *event)
{
QTreeWidget::dropEvent(event);
QTreeWidgetItem *item = itemAt(event->pos());
// тут уже получай какие тебе надо данные
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
dangreen
Гость
« Ответ #3 : Ноябрь 14, 2011, 16:37 »

унаследуйся от QTreeWidget и переопредели в нём void QTreeWidget::dropEvent ( QDropEvent * event ) [virtual protected]
Код
C++ (Qt)
void MyTreeWidget::dropEvent(QDropEvent *event)
{
QTreeWidget::dropEvent(event);
QTreeWidgetItem *item = itemAt(event->pos());
// тут уже получай какие тебе надо данные
}

спасибки, буду пробовать
Записан
dangreen
Гость
« Ответ #4 : Ноябрь 15, 2011, 17:27 »

Код:
void SecTreeWidget::dropEvent(QDropEvent *e)
{
    QTreeWidget::dropEvent(e);
    QTreeWidgetItem *item = itemAt(e->pos());
    emit(itemDroped(item));
}
сделал, работает, но не так как нужно
во-первых: при перетаскивание елемента в елемент, e -  это родитель, а не элемент который перетащил
во-вторых: при перетаскивание элемента в корень, программа крашится

какой костылек сделать?
« Последнее редактирование: Ноябрь 15, 2011, 17:29 от dangreen » Записан
dangreen
Гость
« Ответ #5 : Ноябрь 16, 2011, 13:10 »

Код:
SecTreeWidget::SecTreeWidget(QWidget *parent) :
    QTreeWidget(parent)
{
    connect(this,SIGNAL(itemEntered(QTreeWidgetItem*,int)),SLOT(itemName(QTreeWidgetItem*)));
    this->setHeaderHidden(true);
    this->setDragDropMode(QAbstractItemView::InternalMove);
}

void SecTreeWidget::itemName(QTreeWidgetItem *e)
{
    itemText = e->text(0);
}

void SecTreeWidget::dropEvent(QDropEvent *e)
{
    QTreeWidget::dropEvent(e);
    selectNamedItem(itemText);
}

void SecTreeWidget::selectNamedItem(QString secName)
{
    for(int i=0;i<this->topLevelItemCount();i++){
        if(this->topLevelItem(i)->text(0) == secName)emit(itemDroped(this->topLevelItem(i)));
        else recSelectNamedItem(this->topLevelItem(i),secName);
    }
}

void SecTreeWidget::recSelectNamedItem(QTreeWidgetItem *e, QString secName)
{
    for(int i=0;i<e->childCount();i++){
        if(e->child(i)->text(0) == secName)emit(itemDroped(e->child(i)));
        else recSelectNamedItem(e->child(i),secName);
    }
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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