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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: eventFilter()  (Прочитано 17105 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #15 : Декабрь 25, 2012, 00:09 »

ну тогда попробуй так: для лейбла задай кнопку через buddy (потом так и будешь получать), а для кнопок создай хеш QHash<QPushButton *, QLabel *> hash, и получать лейбл будешь через hash[button]. Ну а в фильтре остаётся только проверить чем на самом деле является object. Красотой конечно решение не блещет, но должно работать быстро.
Записан

Изучением 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
kip_one
Гость
« Ответ #16 : Декабрь 26, 2012, 02:53 »

А можно ли сделать событие event->type() == QEvent::Leave для QGridLayout?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #17 : Декабрь 26, 2012, 03:46 »

QGridLayout же не виджет, так что нельзя. но можно QGridLayout наложить на виджет-контейнер (обычный QWidget), и вот для этого виджета-контейнера и следить за событием. а зачем такая хитрость?
Записан

Изучением 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
kip_one
Гость
« Ответ #18 : Декабрь 26, 2012, 12:45 »

Тут идея небольшая пришла , но вместо одной кнопки теперь нужно 4. Я их сделал и gridlayout засунул.
И этот  gridlayout один для всех QLabel . Когда происходит событие Enter я просто лабел скрываю а gridlayout добавляю.

Код:
bool MainWindow::eventFilter(QObject *object, QEvent *event){


    if(object == ui->graphicsView)checkLoc=1;
    else checkLoc=0;
    for(int i=0;i<usersInYourList;i++){
        if(active==0)
    if(object == usersOnForm[i].image)
    if (event->type() == QEvent::Enter){
         active=1;
         widgetLayout->setVisible(true);
         usersOnForm[i].image->setVisible(false);
         usersOnForm[i].image->setBuddy(widgetLayout);
         usersOnForm[i].gridLayoutOne->addWidget(widgetLayout,3,0);

    }
        if(object == widgetLayout)
         if(event->type() == QEvent::Leave){
            usersOnForm[i].image->setVisible(true);
            widgetLayout->setVisible(false);
            usersOnForm[i].gridLayoutOne->removeWidget(widgetLayout);
            active=0;
    }
}
    return false;
}

Куда тут хеш засунуть?
« Последнее редактирование: Декабрь 26, 2012, 16:00 от kip_one » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #19 : Декабрь 26, 2012, 21:40 »

в этом коде я честно говоря ничего не понимаю, даже после правильного выравнивания. и я же сказал постом выше (и даже там решение предложил), что лейаут не получает никаких событий.
Записан

Изучением 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
kip_one
Гость
« Ответ #20 : Декабрь 27, 2012, 00:00 »

Да, в чужом коде разбираться гнилая идея, согласен) Про лейоут я понял с сделал, и события он тоже получает, не ясно как сюда применить QHash что бы избежать цикла
Записан
Bepec
Гость
« Ответ #21 : Декабрь 27, 2012, 09:29 »

Какая то непонятная (для меня) тема.

Как то непонятно, как может тормозить сравнение указатель на объект аля указатель на объект для списка меньше двухсот элементов.
Про метод indexOf QList даже не упоминали.

Хотя в конце решение с хешами верное Улыбающийся

PS ТС (kip_one) не выделите ли вы время и не объясните мне, как человеку только что заглянувшему что у вас на сей момент не так и чего вы достигли? Улыбающийся
Записан
kip_one
Гость
« Ответ #22 : Декабрь 27, 2012, 14:48 »

Начну пожалуй с самого начала. Нужно сделать горизонтальный список пользователей, на одного пользователя приходится 2 Qlabel(1-имя, 2-картинка.). Когда наводишь курсором на картинку - она скрывается , а 4 кнопки связные QGridLayout и помещены в QWidget появляются(одни экземпляр для всех пользователей). Я с помощью данного форума сделал: создал массив структур(QLabel name,QLabel image,QGridLayout grid,QGroupBox box) пользователей, добавил весь массив пользователей в QGraphicsScene.
eventFilter:
Когда навожу на картинку в grid добавляю widget c кнопками, а картинку скрываю. Когда widget == QEvent::Leave - в grid -> deletewidget(widget),image->setVisible(true).
Все происходит методом перебора значения объекта.
for(int i=0;i<countOfUsers;i++){
    if(object == usersOnForm.image)
countOfUsers количество элементов в массиве.Может быть как и 1 так и 100

Нужно избавиться от цикла , потому что если курсором провести по 3-5 картинкам - загрузка ЦП ~10%
Записан
Bepec
Гость
« Ответ #23 : Декабрь 27, 2012, 14:59 »

Можете выложить мини проектик? (мне просто охота посмотреть на код полностью, некоторые моменты неясны. Согласен даже на куцую куцую версию Подмигивающий )

А так - метод indexOf() в структуре QList вас чем не устраивает?  (К тому же вы вроде с хешами делали, али не доделали?)

Эммм... Ну походу у вас получается весёлая хрень аля "вызовем цикл по 100 элементов с проверкой и какими то действиями."

Хотя по моему разумению, тормозить всё равно не должно. Не тот масштаб - меньше 300 картинок и 10% загрузки.

PS если оперативно выложите, я вечером (18-19 по МСК) посмотрю.
Записан
kip_one
Гость
« Ответ #24 : Декабрь 27, 2012, 15:26 »

https://skydrive.live.com/redir?resid=EF37E6F8B7097AAC!2160
« Последнее редактирование: Декабрь 27, 2012, 15:31 от kip_one » Записан
Bepec
Гость
« Ответ #25 : Декабрь 27, 2012, 15:39 »

Конечно эээ... Оригинальное форматирование.

Глянул перед уездом домой - проблемка понятна. Ориентировочно к 19.00 представлю свою версию Улыбающийся

А так пока вам пища для размышлений.

У вас есть картинки для каждого пользователя (правильно). (100 пользователей = 100 картинок)
У вас есть 4 слота реакции на нажатия кнопочулочек (превосходно). (100 пользователей = 4 слота)
У вас есть на каждого пользователя свой виджет с кнопками. (100 пользователей = 400 кнопок+виджет+лейаут)

Последний пункт вас не смущает? Или у вас есть какие то задумки на этот счёт?
« Последнее редактирование: Декабрь 27, 2012, 15:44 от Bepec » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #26 : Декабрь 27, 2012, 16:06 »

Цитировать
А так - метод indexOf() в структуре QList вас чем не устраивает?
Мне интересно как ты его собираешься применить в данном контексте, где в списке хранятся структуры вида лейбл-кнопка, а событие получает лишь один из виджетов (кнопка и лейбл же никак не связаны между собой)
Записан

Изучением 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
kip_one
Гость
« Ответ #27 : Декабрь 27, 2012, 16:45 »

Bepec, вы наверно не заметили, но там 4 кнопки для всех пользователей, просто они с каждым событием они меняют владельца
Кнопки были созданы только один раз
« Последнее редактирование: Декабрь 27, 2012, 16:46 от kip_one » Записан
Bepec
Гость
« Ответ #28 : Декабрь 27, 2012, 17:07 »

Ненадо на меня сразу кидаться Улыбающийся Убегая с работы, я многое мог не заметить Улыбающийся Приношу извинения Подмигивающий

PS счас сяду, да как возьмусь, да как соберусь.

« Последнее редактирование: Декабрь 27, 2012, 17:21 от Bepec » Записан
kip_one
Гость
« Ответ #29 : Декабрь 27, 2012, 17:24 »

Угрозы ни к чему  Улыбающийся
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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