Название: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Октябрь 25, 2016, 12:05 1. Если выделять одиночные элементы, то сигнал selectionChanged вылетает на нажатие кнопки мыши - хорошо
2. Если выделять много элементов с зажатым Ctrl, то сигнал selectionChanged вылетает на отпускании кнопки мыши и при условии неподвижности мыши - что неудобно Неподвижность мыши как раз и трудно обеспечить, ведь при множественном выделении она скользит и хоть на пиксел да и сдвинется Как сделать и в п.2 также выделение по нажатию ? Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 02, 2016, 01:05 условии неподвижности мыши - что неудобно это потому, что есть ещё один способ выделения - резиновый квадрат... нажать кнопку на пустом месте и тащить за угол квадрат, выделяя айтемы, которые он цепляеттам вроде была возможность выключить этот способ выделения, может быть это повлияет на реакцию на движение мыши сорри, детали не помню, я с этим работал 2 года назад Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 07, 2016, 08:59 это потому, что есть ещё один способ выделения - резиновый квадрат... нажать кнопку на пустом месте и тащить за угол квадрат, выделяя айтемы, которые он цепляет не подойдет резиновый квадрат т.к. нужные элементы могут попадать в него вместе с ненужными, например нужно выделить угловые элементы и пару центральных Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 07, 2016, 13:04 дело не в том, что подойдёт он или нет - он ЕСТЬ по-умолчанию, и для его отработки соответственно отслеживается перемещение мши с нажатой кнопкой
Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 07, 2016, 18:55 ааа, понял, что он может мешать
надо подумать как отключить Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Bepec от Ноябрь 07, 2016, 19:31 Можно просто фильтр поставить и mouseMove с ctrl игнорить.
Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 08, 2016, 10:08 как так игнорить ?
ведь мышь с контролом выделяет элементы, что мне и нужно Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Bepec от Ноябрь 08, 2016, 13:42 Дык нажатие с ctrl будет работать. А движение с ctrl будет игнориться.
PS перечитал первый пост - конкретизируйте нужное вам поведение. А то там двояко трактовать можно :) Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 08, 2016, 14:51 мне нужно чтобы при зажатом ctrl я мог выделять/убирать мышой элементы (например выделить 10 штук), ну как обычно
при этом сигнал выбранности элемента должен выдаваться на нажатие левой кнопки мыши Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 08, 2016, 15:18 Чем вот это обосновано?
Цитировать сигнал выбранности элемента должен выдаваться на нажатие левой кнопки мыши Если нужно просто как-то визуально выделять выбранные объекты, то для этого не нужна обработка сигнала о том, что объект выбран. Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Bepec от Ноябрь 08, 2016, 15:55 Вы что-то непонятное для меня хотите...
Сигнал выдаётся при выделении элемента. Вы же хотите чтоб он выдавался при отжатии левой кнопки мышки? PS так заведите свой сигнал с нужным вам поведением... Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 09, 2016, 08:25 я хочу чтобы сигнал выделенности элемента выдавался при нажатии левой кнопки мыши, т.е. сразу
и так ведь и происходит, когда я выделяю одиночные элементы: нажал_элемент - сигнал, нажал_другой_элемент - сигнал но когда я хочу выделить много элементов, для этого я зажимаю ctrl, при этом жутко неудобно что сигнал выкидывается по отпусканию мыши и при условии что между нажатием и отпусканием мыши не было и даже пиксельного сдвига Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 09, 2016, 09:47 я хочу чтобы сигнал выделенности элемента выдавался при нажатии левой кнопки мыши, т.е. сразу и так ведь и происходит, когда я выделяю одиночные элементы: нажал_элемент - сигнал, нажал_другой_элемент - сигнал но когда я хочу выделить много элементов, для этого я зажимаю ctrl, при этом жутко неудобно что сигнал выкидывается по отпусканию мыши и при условии что между нажатием и отпусканием мыши не было и даже пиксельного сдвига Зачем? Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 09, 2016, 11:39 Зачем? затем, что _не сдвинуть_ мышь при выделении (между моментами нажал .... отпустил) сложно, хоть пиксел, а она сдвинется а если сдвинется, то сигнала не будет для примера можно взять файловый менеджер konquerro или nautilus - там сразу по клику выделение (с зажатым ctrl) Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Bepec от Ноябрь 09, 2016, 14:10 Не как, а зачем?
Зачем вам такое поведение? Вам так важны миллисекунды? Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 09, 2016, 14:59 Зачем? затем, что _не сдвинуть_ мышь при выделении (между моментами нажал .... отпустил) сложно, хоть пиксел, а она сдвинется а если сдвинется, то сигнала не будет для примера можно взять файловый менеджер konquerro или nautilus - там сразу по клику выделение (с зажатым ctrl) Зачем вам СИГНАЛ О КЛИКЕ МЫШИ С НАЖАТЫМ Ctrl? Qt имеет полный готовый механизм для выделения айтемов на сцене, даже с резиновым квадратом. Его просто надо использовать. Всё, чего в нём не хватает - это подсветка выделенных айтемов, поскольку Qt элементарно не знает, как их надо подсвечивать. Поэтому в paintEvent() класса, наследующего от QGraphicsItem, надо просто добавить if( isSelected() ) { ....подсветить айтем тем способом, который нужен... } Всё. QGraphicsScene::selectedItems() даёт список выбранных айтемов. Причём он содержит указатель на один текущий айтем, если на нём был клик мышкой даже без нажатия Ctrl - поскольку при операции с одним айтемом он также является выбранным. Механизм сделан так, что нет необходимости оформлять код отдельно для единственного выбранного айтема, и отдельно для группы. Просто ВСЕГДА работаете с группой айтемов, все свои операции делаете для группы. А один там айтем будет или несколько - это уже Qt обеспечивает. Фишка в том, что механизм этот универсальный и мультиплатформенный - в Windows и Linux он позволяет выделять так, как принято в этих ОС, а в MacOSX по-своему. И более того - в Android он тоже по-своему будет работать, но привычно для пользователей Android. Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 09, 2016, 16:16 Вам так важны миллисекунды? вообще и мне неудобно как сейчас есть (да миллисекунды решают) а также это будет неудобно пользователям, которым придется объяснять что мышь не нужно дергать во время нажатия и отпускания для выделения Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 09, 2016, 16:18 Зачем вам СИГНАЛ О КЛИКЕ МЫШИ С НАЖАТЫМ Ctrl? да ненужен мне сигнал о клике мышой сам по себе мне нужен тут сигнал что элемент выделился (на клик мыши) с подсветкой проблем нет, она имеется, и появляется когда сигнал "выделился" прилетает я про подсветку вообще не упоминал о проблемах с ней Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 09, 2016, 18:11 мне нужен тут сигнал что элемент выделился (на клик мыши) ЗАЧЕМ? И почему именно на клик мыши? Идеология работы с выделенными объектами не делает различий между способами выделения. Выделение резиновым квадратом логически точно то же самое, что и клик мыши. Я недавно делал сложную работу на QGraphicsScene, и мне не понадобился сигнал о том, что объект выделился. Хотя в принципе его легко можно самому соорудить. Насколько я помню, в paintEvent() можно испускать сигналы. Тогда в описании класса Код: private: в конструкторе Код: wasSelected = false; в paintEvent() Код: if( isSelected() ) Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 09, 2016, 19:51 ЗАЧЕМ? И почему именно на клик мыши? Идеология работы с выделенными объектами не делает различий между способами выделения. Выделение резиновым квадратом логически точно то же самое, что и клик мыши. в который раз пытаюсь объяснить что НЕУДОБНО по отпусканию мыши выделение иметь, ибо она НЕ_ВЫДЕЛЯЕТ ничего если мышь сдвинулась - что тут непонятного ? нет выделения при сдвиге мыши, нет и сигнала, ничего нет вот как сделано выделение в konqueror или nautilus - вот так удобно ! там и по клику выделение и "квадрат" тоже есть самому костылики на эвентах пилить не хотелось, думал чтото гдето в настройках есть, что я не нашел Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: Гурман от Ноябрь 09, 2016, 20:53 Честно говоря, не понимаю, что тут неудобного... сейчас запустил своё приложение, лишний раз пожмакал - всё удобно работает, выделяется да, по отпусканию. Нормально, никаких проблем не вызывает. Если выделять с зажатым Ctrl группу, и на последнем не отпускать, а сразу потащить - то выделяется (и у меня тащится) вся группа вместе с тем айтемом, на котором было последнее только нажатие.
По отсылкам на konqueror или nautilus вопрос возник - YALFM что-ли ваяете? Название: Re: Неудобное поведение сигнала selectionChanged в QGraphicsView Отправлено: qate от Ноябрь 10, 2016, 15:48 Нормально, никаких проблем не вызывает. ну так тему я создал, что неудобно мне ) По отсылкам на konqueror или nautilus вопрос возник - YALFM что-ли ваяете? нет, но поведение при выделении хотелось бы иметь схожее у меня отображаются некие датчики, которые нужно выбирать или один или несколько - для выполнения над ними операций да, выбрать медленно, не спеша можно, так оно сейчас и есть, но неудобно становиться когда выбирать надо побыстрее или людьми которые мышь держат неуверенно ) пока я занялся логикой, и интерфейс пока не дорабатываю |