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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: подскажите пожалуйста как достать object name и текст объектов в dropEvent?  (Прочитано 8595 раз)
megido
Гость
« : Декабрь 30, 2016, 14:08 »

Код:
void DragListWidget::dropEvent(QDropEvent *event)
{
    if (event->mimeData()->hasUrls()) {
        foreach (QUrl url, event->mimeData()->urls()) {
            qDebug() << url;
        }
    }  // пусто

    QString name = event->mimeData()->text();
    qDebug() << name; // выводит ""
    QListWidget::dropEvent(event);

    

}

используется мультивыбор элементов
« Последнее редактирование: Декабрь 30, 2016, 14:40 от megido » Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #1 : Декабрь 30, 2016, 14:41 »

Просто.
objectName();
Или я не понял вопроса. Какого именно объекта? Класс должен быть наследником QObject. Иначе у него никаких objectName нет
Записан
megido
Гость
« Ответ #2 : Декабрь 30, 2016, 15:02 »

Просто.
objectName();
Или я не понял вопроса. Какого именно объекта? Класс должен быть наследником QObject. Иначе у него никаких objectName нет

    QObject *sourceObject=qobject_cast<QObject *>( event->source() );

    qDebug() << sourceObject->objectName(); это выводит название объекта ИЗ какого перетащили элемент.
    а мне нужно название объекта в какой перетащили.
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #3 : Декабрь 30, 2016, 15:14 »

    а мне нужно название объекта в какой перетащили.
Дык, а вы что не знаете объекта, в который перетаскиваете? не в сам ли объкт класса DragListWidget ? Тогда
Код:
this->objectName();
  или просто
objectName();
Записан
megido
Гость
« Ответ #4 : Декабрь 30, 2016, 15:17 »

    а мне нужно название объекта в какой перетащили.
Дык, а вы что не знаете объекта, в который перетаскиваете? не в сам ли объкт класса DragListWidget ? Тогда
Код:
this->objectName();
  или просто
objectName();
вот блин. а я тут горожу велосипед Веселый
а как получить текст дропнутых элементов?
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #5 : Декабрь 30, 2016, 15:29 »

Я думаю, столь же просто. Стандартными методами. Ну, конечно, с анализом того, что вы дропаете и есть ли там текст. Деталей подсказать не могу, так как сам этим не занимался.
Но соображения такие. Объект (дропнутый) ведь вам доступен? Кастируйте его к нужному типу. И извлекайте то, что вам надо. Имхо, все в пределах документации без хитростей.
Записан
megido
Гость
« Ответ #6 : Декабрь 30, 2016, 15:34 »

Я думаю, столь же просто. Стандартными методами. Ну, конечно, с анализом того, что вы дропаете и есть ли там текст. Деталей подсказать не могу, так как сам этим не занимался.
Но соображения такие. Объект (дропнутый) ведь вам доступен? Кастируйте его к нужному типу. И извлекайте то, что вам надо. Имхо, все в пределах документации без хитростей.
я могу кастануть его. но мне не нужно вытащить все элементы виджета. мне нужно только те что были перенесены.
Записан
Bepec
Гость
« Ответ #7 : Декабрь 30, 2016, 15:51 »

Все данные о том, ЧТО переносится, КАК переносится, КУДА переносится находятся в евенте... Просто пройдитесь по методам и всё у вас получится.
Записан
megido
Гость
« Ответ #8 : Декабрь 30, 2016, 16:11 »

разобрался

это кошмар
Код:
    QByteArray text = event->mimeData()->data("application/x-qabstractitemmodeldatalist");
    QDataStream stream(&text, QIODevice::ReadOnly);
    while (!stream.atEnd())
    {
        int row, col;
        QMap<int,  QVariant> roleDataMap;
        stream >> row >> col >> roleDataMap;
        emit UpdateSignal(roleDataMap.first().toString(),bool(active),group_id);
    }
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Декабрь 30, 2016, 16:41 »

чтобы не было кошмара, можно отказаться от widget и использовать view+model, а в модели написать свое заполнение данных драга
Записан

Изучением 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
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #10 : Декабрь 30, 2016, 23:57 »

Цитировать
это кошмар
Видимо, кошмарно спроектирован весь проект. Плюс кошмарное понимание (кошмарное непонимание) совершенно элементарных вещей.
Я вам могу посоветовать на некоторое время перестать "творить", а просто почитать документацию.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Декабрь 31, 2016, 06:43 »

чтобы не было кошмара, можно отказаться от widget и использовать view+model, а в модели написать свое заполнение данных драга
Конечно это (намного) проще, но теряется возможность переноса данных между разными приложениями. Насколько она нужна - другой вопрос, но идеология DnD это предполагает
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Декабрь 31, 2016, 18:01 »

чтобы не было кошмара, можно отказаться от widget и использовать view+model, а в модели написать свое заполнение данных драга
Конечно это (намного) проще, но теряется возможность переноса данных между разными приложениями. Насколько она нужна - другой вопрос, но идеология DnD это предполагает
не совсем понимаю в чем проблема. речь о других Qt приложениях, использующих *widget?

если корректно заполнить mimeData, другие приложения смогут спокойно читать данные.
Записан

Изучением 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
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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