2014-11-17 4 views
3

По умолчанию окна QDialog имеют кнопку вопросительного знака в верхнем правом углу. Когда я нажимаю на него, курсор мыши изменяется на «Запретный» курсор, и ничего больше не происходит.QDialog: как использовать знак вопроса (?) Кнопка?

В то время как есть много информации, полученной от тех, кто хочет удалить знак вопроса (atleastthree SO темы посвящены этой теме), the documentation для QDialog не имеет ничего о том, как на самом деле использовать его.

Как получить мое приложение для отображения информации при щелчке на вопросительном знаке? Например, как я могу получить сигнал clicked с кнопки? Еще лучше, где эта кнопка документирована?

ответ

3

Это не кнопка, задокументированная Qt. Вы можете обнаружить это, ловя события и проверки типа события:

http://qt-project.org/doc/qt-5/qevent.html#Type-enum

Существуют различные типы как QEvent::EnterWhatsThisModeQEvent::WhatsThisClicked и так далее. Я достиг чего-то похожего на то, что вы ищете, используя фильтр событий в mainwindow.

if(event->type() == QEvent::EnterWhatsThisMode) 
    qDebug() << "click"; 

Я видел "щелчок", когда я нажал на кнопку ?.

+0

@Chrnobyl cool ... теперь мне нужно выяснить, как остановить его от отображения формы курсора мыши «Запрещено» - похоже, что кнопка была нажата с ошибкой (довольно странное поведение по умолчанию, imo). – neuronet

+0

@neuronet «Запретный» курсор мыши должен быть на каждом виджете, который не поддерживает whatsThis, так что это нормально, или я неправильно понял вас? – Chernobyl

+0

Даже после переопределения события запрещенный курсор все еще заблокирован. Аналогично, даже когда я добавляю 'QtGui.QApplication.setOverrideCursor (QtGui.QCursor (QtCore.Qt.ArrowCursor)) к обработчику события: временно отображается как стрелка, но запретный курсор возвращается, когда курсор покидает строку заголовка. Я планирую рассказать об этом как отдельный вопрос ... – neuronet

1

На основании ответа Чернобыле, это то, как я сделал это в Python (PySide):

def event(self, event): 
    if event.type() == QtCore.QEvent.EnterWhatsThisMode: 
     print "click" 
     return True 
    return QtGui.QDialog.event(self, event) 

То есть, вы переописать event когда приложение входит в 'WhatsThisMode'. В противном случае переходите обратно к базовому классу.

Он почти работает. Единственная морщина заключается в том, что курсор мыши все еще превращается в форму «Запрещено». На основании another post, я избавился от этого, добавив:

QtGui.QWhatsThis.leaveWhatsThisMode() 

Как линии непосредственно перед командой печати в предыдущей.

4

Другие ответы были немного вводящими в заблуждение для меня, сосредоточившись только на том, чтобы поймать событие вопроса, но не объяснять нормальное использование.

Когда эта кнопка нажата и вызывается WhatsThisMode, элементы диалога должны предоставлять информацию о себе. И если мышь нависает над элементом, который поддерживает эту информацию, тогда указатель станет стрелкой-указателем с вопросительным знаком (по крайней мере на Windows) с сообщением всплывающей подсказки, отображаемым щелчком мыши.

Вот как достичь его в PySide:

someWidget.setWhatsThis("Help on widget") 

QWhatsThis документация PySide и Qt5 также доступна.

+0

Это здорово, вы правильные ответы на вышеприведенные ответы сосредоточены на индивидуальном использовании, спасибо за указание стандартного использования и документации! – neuronet

Смежные вопросы