Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Senia_Bezrubashkin от Январь 18, 2013, 02:45



Название: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 18, 2013, 02:45
Код:
QAbstractItemView::clicked(const QModelIndex & index)
Как вызвать этот сигнал правой кнопкой мыши?
Заранее спасибо.


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: carrygun от Январь 18, 2013, 05:09
Переопределить mousePressEvent(), смотреть кнопки эвента и на метод itemAt().


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 19, 2013, 08:59
А область айтема для курсора придется задавать?


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 19, 2013, 18:06
Из различных источников почерпнул, что нужно определять область при пересечении границ которой можно высылать сигнал (с этим более-менее понятно), но вот как определять саму область (ну, чтобы она была привязана к конкретному объекту (координаты объекта могут меняться (ну, мне так думается))) не совсем ясно. Или я все не правильно мыслю? А может есть более очевидный способ выслать обсуждаемый сигнал для правой кнопки мыши (ну, как для левой кнопки)?


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Bepec от Январь 19, 2013, 18:53
Qt сам определяет где и кто и чем кликнул.

Данный слот относится к виджету. У виджета есть параметры как положение, высота ширина.


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 20, 2013, 10:39
Блин... а чтобы itemAt() вызвать нужно наследоваться от QGraphicsView?


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Old от Январь 20, 2013, 10:42
Блин... а чтобы itemAt() вызвать нужно наследоваться от QGraphicsView?
Почему? Он в публичных методах.


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 20, 2013, 10:58
Почему? Он в публичных методах.
В публичных методах где?


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Bepec от Январь 20, 2013, 11:03
Надо вам почитать книгу C++ за 21 день. Через полгодика поймёте суть.

Публичные методы можно вызывать, имея указатель на класс. Приватные - только если ваш класс является наследником.

Ещё проще:
Код:
ui.graphicsView->itemAt(); // можно.


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 20, 2013, 11:22
Надо вам почитать книгу C++ за 21 день. Через полгодика поймёте суть.

Публичные методы можно вызывать, имея указатель на класс. Приватные - только если ваш класс является наследником.

Ещё проще:
Код:
ui.graphicsView->itemAt(); // можно.
Может тогда книгу С++ за пол годика?  ;D


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: carrygun от Январь 21, 2013, 05:53
При чем тут QGraphicsView?


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Bepec от Январь 21, 2013, 05:58
Ахз. Меня заразил хозяин темы, я начал фигню нести :D

PS а ТС-су почитать про С++ надо всё же .


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 21, 2013, 10:17
При чем тут QGraphicsView?
Потому что itemAt() там нашел.


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Senia_Bezrubashkin от Январь 21, 2013, 10:24
Ахз. Меня заразил хозяин темы, я начал фигню нести :D
Нужно брать ответственность за свои поступки... вообще нормальный принцип.
PS а ТС-су почитать про С++ надо всё же .
А я, по твоему, что делаю? Или только в последовательном режиме голова работает? Параллельно не... никак?  8)


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: carrygun от Январь 21, 2013, 11:28
Потому что itemAt() там нашел.

Я немного перепутал метод, тебе нужен indexAt(), тот что у QAbstractItemView. Наследуешься от нужного класса (например QTreeView), переопределяешь двойной щелчек мышью, смотришь на кнопки мыши и координаты эвента и, если надо, испускаешь сигнал с нужным индексом (или что тебе удобнее).


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Bepec от Январь 21, 2013, 11:33
А ещё можно поставить простой eventFilter на виджет и с успехом его обрабатывать.

PS а я отвечаю за свои поступки :)  Сказал - фигню нести начал и действительно - фигню нёс:D


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: carrygun от Январь 21, 2013, 12:05
Вот кстати такой момент. Люди рубящие, объясните что и когда лучше в плане переопределения метода или фильтра эвентов.

В каких случаях какие решения выгоднее/правильнее и почему?


Название: Re: Как вызвать сигнал clicked() правой кнопкой мыши?
Отправлено: Bepec от Январь 21, 2013, 12:20
У каждого своё мнение.

Если нужно переопределить одну функцию в классе (например в TableView), то имеет смысл поставить фильтр и вместо одного класса (практически не использующегося) у вас будет одна функция.

А вот если парочку + свой функционал - проще наследоваться :)