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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QTreeWidget перехватить клик правой кнопкой маши.  (Прочитано 8072 раз)
maks
Гость
« : Май 08, 2009, 02:29 »

Как в QTreeWidget перехватить клик правой кнопкой маши?
Искал соответствующий сигнал и не нашел. А делать наследника как то не хочется.
Записан
kirill
Гость
« Ответ #1 : Май 08, 2009, 06:17 »

Код
C++ (Qt)
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == treeWidget) {
        if (event->type() == QEvent::MouseButtonPress) {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
            if (mouseEvent->button() == Qt::RightButton){
            qDebug() << "right mouse press";
            return true;
            }
        } else {
            return false;
        }
    } else {
        // pass the event on to the parent class
        return QMainWindow::eventFilter(obj, event);
    }
}

Код
C++ (Qt)
MainWindow::MainWindow()
{
   //...
    treeWidget->installEventFilter(this);
}

PS ху ис маша?
« Последнее редактирование: Май 08, 2009, 06:20 от kirill » Записан
ритт
Гость
« Ответ #2 : Май 08, 2009, 06:50 »

насколько я понял из мессаги "Можешь в http://www.prog.org.ru/index.php?topic=9447.msg53980; сказать людям, что можно через контекстменю ще сделать, а то я не успею.  Я убежал.",
panter.dsd предлагает черезжопный (но рабочий) /* или наоборот - рабочий (но черезжопный) */ метод...примерно так:
Код:
treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(treeWidget, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(showSplitterContextMenu(const QPoint&)));
%)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Май 08, 2009, 11:40 »

panter.dsd предлагает черезжопный .... метод

С чего бы это он черезжопный?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Май 08, 2009, 16:14 »

Цитировать
[16:26:39] <Пантер> Спасибо, что на форуме ответил. Улыбающийся Вот только про черезжопность я не понял.
[16:27:22] <Константин > а как заставить этот способ работать, если нужно контекстное меню из акшенов виджета? )
[16:28:11] <Пантер> Непонимающий А как выпадет контекстное меню если ловить правый клик?
[16:28:31] <Константин > так и выпадет
[16:28:55] <Константин > а как в айтемвьюхах селект устанавливается по правому клику одновременно с менюхой?
[16:29:34] <Константин > принимается правый клик, обрабатывается и отправляется дальше по цепочке
[16:30:18] <Пантер> Ну, в showSplitterContextMenu(const QPoint&) можно будет тоже создать меню и показать. Улыбающийся
[16:30:44] <Пантер> Согласен, это не очень хорошее решение, но иногда оно проще.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Май 08, 2009, 16:21 »

 Непонимающий
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spirit
Гость
« Ответ #6 : Май 08, 2009, 17:14 »

че-то я тоже не догоняю почему он черезжопный, нормальный способ.
Записан
ритт
Гость
« Ответ #7 : Май 09, 2009, 11:07 »

Цитировать
void QWidget::customContextMenuRequested ( const QPoint & pos )   [signal]

This signal is emitted when the widget's contextMenuPolicy is Qt::CustomContextMenu, and the user has requested a context menu on the widget. The position pos is the position of the context menu event that the widget receives. Normally this is in widget coordinates. The exception to this rule is QAbstractScrollArea and its subclasses that map the context menu event to coordinates of the viewport() .

See also mapToGlobal(), QMenu, and contextMenuPolicy.
политика должна быть Qt::CustomContextMenu. если политика иная (нужно нам другое контекстное меню...или вовсе не нужно), сигнала не будет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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