本文整理汇总了C++中QMouseEvent::spontaneous方法的典型用法代码示例。如果您正苦于以下问题:C++ QMouseEvent::spontaneous方法的具体用法?C++ QMouseEvent::spontaneous怎么用?C++ QMouseEvent::spontaneous使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QMouseEvent
的用法示例。
在下文中一共展示了QMouseEvent::spontaneous方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: eventFilter
bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
{
if (!isActive()
|| (ee->type() != QEvent::MouseButtonPress
&& ee->type() != QEvent::MouseButtonRelease
&& ee->type() != QEvent::MouseMove
&& ee->type() != QEvent::KeyPress
&& ee->type() != QEvent::ShortcutOverride)
)
return false;
Q_ASSERT(o == widget);
QWidget *w = widget;
if (QApplication::activePopupWidget()) {
if (buttonDown && ee->type() == QEvent::MouseButtonRelease)
buttonDown = false;
return false;
}
QMouseEvent *e = (QMouseEvent*)ee;
switch (e->type()) {
case QEvent::MouseButtonPress: {
if (w->isMaximized())
break;
if (!widget->rect().contains(widget->mapFromGlobal(e->globalPos())))
return false;
if (e->button() == Qt::LeftButton) {
#if defined(Q_WS_X11)
/*
Implicit grabs do not stop the X server from changing
the cursor in children, which looks *really* bad when
doing resizingk, so we grab the cursor. Note that we do
not do this on Windows since double clicks are lost due
to the grab (see change 198463).
*/
if (e->spontaneous())
# if !defined(QT_NO_CURSOR)
widget->grabMouse(widget->cursor());
# else
widget->grabMouse();
# endif // QT_NO_CURSOR
#endif // Q_WS_X11
buttonDown = false;
emit activate();
bool me = movingEnabled;
movingEnabled = (me && o == widget);
mouseMoveEvent(e);
movingEnabled = me;
buttonDown = true;
moveOffset = widget->mapFromGlobal(e->globalPos());
invertedMoveOffset = widget->rect().bottomRight() - moveOffset;
if (mode == Center) {
if (movingEnabled)
return true;
} else {
return true;
}
}
} break;
case QEvent::MouseButtonRelease:
if (w->isMaximized())
break;
if (e->button() == Qt::LeftButton) {
moveResizeMode = false;
buttonDown = false;
widget->releaseMouse();
widget->releaseKeyboard();
if (mode == Center) {
if (movingEnabled)
return true;
} else {
return true;
}
}
break;
case QEvent::MouseMove: {
if (w->isMaximized())
break;
buttonDown = buttonDown && (e->buttons() & Qt::LeftButton); // safety, state machine broken!
bool me = movingEnabled;
movingEnabled = (me && o == widget && (buttonDown || moveResizeMode));
mouseMoveEvent(e);
movingEnabled = me;
if (mode == Center) {
if (movingEnabled)
return true;
} else {
return true;
}
} break;
case QEvent::KeyPress:
keyPressEvent((QKeyEvent*)e);
break;
case QEvent::ShortcutOverride:
if (buttonDown) {
((QKeyEvent*)ee)->accept();
return true;
}
break;
default:
//.........这里部分代码省略.........