Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: qate от Октябрь 25, 2016, 12:05



Название: Неудобное поведение сигнала 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:
bool wasSelected;

public:
signals:
    void selected();
    void unselected();

в конструкторе

Код:
    wasSelected = false;

в paintEvent()

Код:
if( isSelected() )
{
    if( ! wasSelected )
    {
         emit selected();
         wasSelected = true;
    }
}
else
{
    if( wasSelected )
   {
        emit unselected();
        wasselected = false;
    }
}


Название: 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 что-ли ваяете?

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