Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: neosapient от Май 15, 2009, 11:38



Название: Как определить правый клик по кнопке?
Отправлено: neosapient от Май 15, 2009, 11:38
Здравствуйте.

Появилась задача копировать кусок надписи кнопки в буфер обмена, когда кнопке отсылается right click.
Как можно поймать/отследить этот правый клик.


Название: Re: Как определить правый клик по кнопке?
Отправлено: spirit от Май 15, 2009, 11:42
это нужно , что бы отобразить контектсное меню?


Название: Re: Как определить правый клик по кнопке?
Отправлено: neosapient от Май 15, 2009, 12:20
Нет
надо просто копировать текст при правом клике.


Название: Re: Как определить правый клик по кнопке?
Отправлено: spirit от Май 15, 2009, 12:25
ну один из вариантов -- это установить ивент фильтр на виджет,
из которого что-то будет копироваться, и отлавливать правый клик.


Название: Re: Как определить правый клик по кнопке?
Отправлено: Rcus от Май 15, 2009, 12:26
Цитировать
contextMenuPolicy : Qt::ContextMenuPolicy

This property holds how the widget shows a context menu.

The default value of this property is Qt::DefaultContextMenu, which means the contextMenuEvent() handler is called. Other values are Qt::NoContextMenu, Qt::PreventContextMenu, Qt::ActionsContextMenu, and Qt::CustomContextMenu. With Qt::CustomContextMenu, the signal customContextMenuRequested() is emitted.

Не то?


Название: Re: Как определить правый клик по кнопке?
Отправлено: neosapient от Май 15, 2009, 13:36
В общем сделал наследника от QPushButton и стал обрабатывать mousePressEvent

Код:
void QxPushButton::mousePressEvent(QMouseEvent * e){
if (e->buttons() & Qt::RightButton) {
QString t = text();

QApplication::clipboard()->setText(t);
}
}


Название: Re: Как определить правый клик по кнопке?
Отправлено: Пантер от Май 15, 2009, 16:51
Можно и без наследника, через installEventFilter.


Название: Re: Как определить правый клик по кнопке?
Отправлено: MoPDoBoPoT от Май 15, 2009, 18:49
По-моему самое разумное решение в данной ситуации будет либо ловить стгнал customContextMenuRequested ( const QPoint & pos ), либо установить фильтр installEventFilter ( QObject * filterObj )
Наследование здесь самый длинный путь.