本文整理汇总了C++中QRect::contains方法的典型用法代码示例。如果您正苦于以下问题:C++ QRect::contains方法的具体用法?C++ QRect::contains怎么用?C++ QRect::contains使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QRect
的用法示例。
在下文中一共展示了QRect::contains方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: determineResizingMode
UBRubberBand::enm_resizingMode UBRubberBand::determineResizingMode(QPoint pos)
{
if (mMouseIsPressed)
return mResizingMode;
QRect resizerTop (mResizingBorderHeight , 0 , rect().width()-2*mResizingBorderHeight, mResizingBorderHeight );
QRect resizerBottom (mResizingBorderHeight , rect().height() - mResizingBorderHeight, rect().width()-2*mResizingBorderHeight, mResizingBorderHeight );
QRect resizerLeft (0 , mResizingBorderHeight , mResizingBorderHeight , rect().height() - 2*mResizingBorderHeight);
QRect resizerRight (rect().width()-mResizingBorderHeight, mResizingBorderHeight , mResizingBorderHeight , rect().height() - 2*mResizingBorderHeight);
QRect resizerTopLeft (0 , 0 , mResizingBorderHeight, mResizingBorderHeight);
QRect resizerTopRight (rect().width()-mResizingBorderHeight, 0 , mResizingBorderHeight, mResizingBorderHeight);
QRect resizerBottomLeft (0 , rect().height() - mResizingBorderHeight, mResizingBorderHeight, mResizingBorderHeight);
QRect resizerBottomRight(rect().width()-mResizingBorderHeight, rect().height() - mResizingBorderHeight, mResizingBorderHeight, mResizingBorderHeight);
enm_resizingMode resizingMode;
QTransform cursorTransrofm;
if (resizerTop.contains(pos))
{
resizingMode = Top;
cursorTransrofm.rotate(90);
}
else
if (resizerBottom.contains(pos))
{
resizingMode = Bottom;
cursorTransrofm.rotate(90);
}
else
if (resizerLeft.contains(pos))
{
resizingMode = Left;
}
else
if (resizerRight.contains(pos))
{
resizingMode = Right;
}
else
if (resizerTopLeft.contains(pos))
{
resizingMode = TopLeft;
cursorTransrofm.rotate(45);
}
else
if (resizerTopRight.contains(pos))
{
resizingMode = TopRight;
cursorTransrofm.rotate(-45);
}
else
if (resizerBottomLeft.contains(pos))
{
resizingMode = BottomLeft;
cursorTransrofm.rotate(-45);
}
else
if (resizerBottomRight.contains(pos))
{
resizingMode = BottomRight;
cursorTransrofm.rotate(45);
}
else
resizingMode = None;
if (None != resizingMode)
{
QPixmap pix(":/images/cursors/resize.png");
QCursor resizeCursor = QCursor(pix.transformed(cursorTransrofm, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
setCursor(resizeCursor);
}
else
unsetCursor();
return resizingMode;
}
示例2: timerEvent
/* Timer event processor
* Handles auto hide feature of the toolbar */
void VBoxMiniToolBar::timerEvent(QTimerEvent *pEvent)
{
if (pEvent->timerId() == m_scrollTimer.timerId())
{
/* Due to X11 async nature, this timer-event could come before parent
* VM window become visible, we should ignore those timer-events: */
if (QApplication::desktop()->screenNumber(window()) == -1)
return;
/* Update tool-bar position: */
QRect screen = m_fSeamless ? vboxGlobal().availableGeometry(QApplication::desktop()->screenNumber(window())) :
QApplication::desktop()->screenGeometry(window());
switch (m_alignment)
{
case AlignTop:
{
if (((m_iPositionY == screen.y()) && m_fSlideToScreen) ||
((m_iPositionY == screen.y() - height() + 1) && !m_fSlideToScreen))
{
m_scrollTimer.stop();
if (m_fHideAfterSlide)
{
m_fHideAfterSlide = false;
hide();
}
return;
}
m_fSlideToScreen ? ++m_iPositionY : --m_iPositionY;
break;
}
case AlignBottom:
{
if (((m_iPositionY == screen.y() + screen.height() - height()) && m_fSlideToScreen) ||
((m_iPositionY == screen.y() + screen.height() - 1) && !m_fSlideToScreen))
{
m_scrollTimer.stop();
if (m_fHideAfterSlide)
{
m_fHideAfterSlide = false;
hide();
}
return;
}
m_fSlideToScreen ? --m_iPositionY : ++m_iPositionY;
break;
}
default:
break;
}
move(parentWidget()->mapFromGlobal(QPoint(m_iPositionX, m_iPositionY)));
emit geometryUpdated();
}
else if (pEvent->timerId() == m_autoScrollTimer.timerId())
{
QRect rect = this->rect();
QPoint p = mapFromGlobal(QCursor::pos());
if (!rect.contains(p))
{
++m_iAutoHideCounter;
if (m_iAutoHideCounter == m_iAutoHideTotalCounter)
{
m_fSlideToScreen = false;
m_scrollTimer.start(m_iScrollDelay, this);
}
}
else
m_iAutoHideCounter = 0;
}
else
QWidget::timerEvent(pEvent);
}
示例3: showEvent
void XDialog::showEvent(QShowEvent *event)
{
if(!_private->_shown)
{
_private->_shown = true;
QRect availableGeometry = QApplication::desktop()->availableGeometry();
QString objName = objectName();
QPoint pos = xtsettingsValue(objName + "/geometry/pos").toPoint();
QSize lsize = xtsettingsValue(objName + "/geometry/size").toSize();
if(lsize.isValid() && xtsettingsValue(objName + "/geometry/rememberSize", true).toBool())
resize(lsize);
// do I want to do this for a dialog?
//_windowList.append(w);
QRect r(pos, size());
if(!pos.isNull() && availableGeometry.contains(r) && xtsettingsValue(objName + "/geometry/rememberPos", true).toBool())
move(pos);
_private->_rememberPos = new QAction(tr("Remember Posisition"), this);
_private->_rememberPos->setCheckable(true);
_private->_rememberPos->setChecked(xtsettingsValue(objectName() + "/geometry/rememberPos", true).toBool());
connect(_private->_rememberPos, SIGNAL(triggered(bool)), this, SLOT(setRememberPos(bool)));
_private->_rememberSize = new QAction(tr("Remember Size"), this);
_private->_rememberSize->setCheckable(true);
_private->_rememberSize->setChecked(xtsettingsValue(objectName() + "/geometry/rememberSize", true).toBool());
connect(_private->_rememberSize, SIGNAL(triggered(bool)), this, SLOT(setRememberSize(bool)));
addAction(_private->_rememberPos);
addAction(_private->_rememberSize);
setContextMenuPolicy(Qt::ActionsContextMenu);
QStringList parts = objectName().split(" ");
QStringList search_parts;
QString oName;
while(!parts.isEmpty())
{
search_parts.append(parts.takeFirst());
oName = search_parts.join(" ");
// load and run an QtScript that applies to this window
qDebug() << "Looking for a script on dialog " << oName;
q.prepare("SELECT script_source, script_order"
" FROM script"
" WHERE((script_name=:script_name)"
" AND (script_enabled))"
" ORDER BY script_order;");
q.bindValue(":script_name", oName);
q.exec();
while(q.next())
{
QString script = scriptHandleIncludes(q.value("script_source").toString());
if(!_private->_engine)
{
_private->_engine = new QScriptEngine();
omfgThis->loadScriptGlobals(_private->_engine);
QScriptValue mywindow = _private->_engine->newQObject(this);
_private->_engine->globalObject().setProperty("mywindow", mywindow);
}
QScriptValue result = _private->_engine->evaluate(script, objectName());
if (_private->_engine->hasUncaughtException())
{
int line = _private->_engine->uncaughtExceptionLineNumber();
qDebug() << "uncaught exception at line" << line << ":" << result.toString();
}
}
}
}
示例4: editorEvent
bool KisNodeDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
if ((event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick)
&& (index.flags() & Qt::ItemIsEnabled))
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
const QRect iconsRect_ = iconsRect(option, index).translated(option.rect.topLeft());
if (iconsRect_.isValid() && iconsRect_.contains(mouseEvent->pos())) {
// Avoid conflicts with context menu events
if (!(mouseEvent->buttons() & Qt::LeftButton)) {
return false;
}
const int iconWidth = option.decorationSize.width();
int xPos = mouseEvent->pos().x() - iconsRect_.left();
if (xPos % (iconWidth + d->margin) < iconWidth) { //it's on an icon, not a margin
Model::PropertyList propertyList = index.data(Model::PropertiesRole).value<Model::PropertyList>();
int clickedProperty = -1;
// Discover which of all properties was clicked
for (int i = 0; i < propertyList.count(); ++i) {
if (propertyList[i].isMutable) {
xPos -= iconWidth + d->margin;
}
++clickedProperty;
if (xPos < 0) break;
}
// Using Ctrl+click to enter stasis
if (mouseEvent->modifiers() == Qt::ControlModifier
&& propertyList[clickedProperty].canHaveStasis) {
// STEP 0: Prepare to Enter or Leave control key stasis
quint16 numberOfLeaves = model->rowCount(index.parent());
QModelIndex eachItem;
// STEP 1: Go.
if (propertyList[clickedProperty].isInStasis == false) { // Enter
/* Make every leaf of this node go State = False, saving the old property value to stateInStasis */
for (quint16 i = 0; i < numberOfLeaves; ++i) { // Foreach leaf in the node (index.parent())
eachItem = model->index(i, 0, index.parent());
// The entire property list has to be altered because model->setData cannot set individual properties
Model::PropertyList eachPropertyList = eachItem.data(Model::PropertiesRole).value<Model::PropertyList>();
eachPropertyList[clickedProperty].stateInStasis = eachPropertyList[clickedProperty].state.toBool();
eachPropertyList[clickedProperty].state = false;
eachPropertyList[clickedProperty].isInStasis = true;
model->setData(eachItem, QVariant::fromValue(eachPropertyList), Model::PropertiesRole);
}
/* Now set the current node's clickedProperty back to True, to save the user time
(obviously, if the user is clicking one item with ctrl+click, that item should
have a True property, value while the others are in stasis and set to False) */
// First refresh propertyList, otherwise old data will be saved back causing bugs
propertyList = index.data(Model::PropertiesRole).value<Model::PropertyList>();
propertyList[clickedProperty].state = true;
model->setData(index, QVariant::fromValue(propertyList), Model::PropertiesRole);
} else { // Leave
/* Make every leaf of this node go State = stateInStasis */
for (quint16 i = 0; i < numberOfLeaves; ++i) {
eachItem = model->index(i, 0, index.parent());
// The entire property list has to be altered because model->setData cannot set individual properties
Model::PropertyList eachPropertyList = eachItem.data(Model::PropertiesRole).value<Model::PropertyList>();
eachPropertyList[clickedProperty].state = eachPropertyList[clickedProperty].stateInStasis;
eachPropertyList[clickedProperty].isInStasis = false;
model->setData(eachItem, QVariant::fromValue(eachPropertyList), Model::PropertiesRole);
}
}
} else {
propertyList[clickedProperty].state = !propertyList[clickedProperty].state.toBool();
model->setData(index, QVariant::fromValue(propertyList), Model::PropertiesRole);
}
}
return true;
}
if (mouseEvent->button() == Qt::LeftButton &&
mouseEvent->modifiers() == Qt::AltModifier) {
d->view->setCurrentIndex(index);
model->setData(index, true, Model::AlternateActiveRole);
return true;
}
if (mouseEvent->button() != Qt::LeftButton) {
d->view->setCurrentIndex(index);
return false;
}
}
else if (event->type() == QEvent::ToolTip) {
if (!KisConfig().hidePopups()) {
QHelpEvent *helpEvent = static_cast<QHelpEvent*>(event);
d->tip.showTip(d->view, helpEvent->pos(), option, index);
}
return true;
} else if (event->type() == QEvent::Leave) {
d->tip.hide();
}
return false;
}
示例5: contextMenuEvent
void ChartWidget::contextMenuEvent(QContextMenuEvent* e)
{
QRect rcWaveforms = m_rcPixmap;
ChartPointInfo info;
QPoint ptPixmap = e->pos() - m_rcPixmap.topLeft();
m_pixmap->fillChartPointInfo(ptPixmap, &info);
m_clickInfo = info;
ViewWaveInfo* vwi = info.vwi;
m_ptMouseWidget = e->pos();
m_ptMousePixmap = ptPixmap;
m_ptClickWidget = m_ptMouseWidget;
m_ptClickPixmap = m_ptMousePixmap;
const WaveInfo* wave = NULL;
if (vwi != NULL)
wave = vwi->wave();
QMenu menu(this);
QAction* actAddPeakEndPoint = NULL;
QAction* actAddPeakMarker = NULL;
QAction* actAddTimeMarker = NULL;
QAction* actRemoveMarker = NULL;
QAction* actSettings = NULL;
QAction* actDelete = NULL;
{
// Clicked on a chosen peak:
if (info.iChosenPeak >= 0)
{
if (m_chartS->params().task == EadTask_Markers) {
actRemoveMarker = new QAction(tr("Remove Marker"), &menu);
menu.addAction(actRemoveMarker);
if (wave->peaksChosen[info.iChosenPeak].type == MarkerType_EadPeakXY) {
actAddPeakEndPoint = new QAction(tr("Add End-Point to Marker"), &menu);
menu.addAction(actAddPeakEndPoint);
}
}
}
// Clicked on a detected peak:
else if (info.didxPossiblePeak >= 0)
{
actAddPeakMarker = new QAction(tr("Add Peak Marker"), &menu);
menu.addAction(actAddPeakMarker);
}
// Clicked on a wave:
else if (wave != NULL)
{
if (m_chartS->params().task == EadTask_Markers) {
if (wave->type == WaveType_EAD || wave->type == WaveType_FID) {
actAddPeakMarker = new QAction(tr("Add Peak Marker"), &menu);
menu.addAction(actAddPeakMarker);
}
actAddTimeMarker = new QAction(tr("Add Time Marker"), &menu);
menu.addAction(actAddTimeMarker);
}
actSettings = new QAction(tr("Settings..."), &menu);
menu.addAction(actSettings);
actDelete = new QAction(tr("Delete..."), &menu);
// Enable if this is not an averaged wave
actDelete->setEnabled(wave->recId() > 0);
menu.addAction(actDelete);
}
else if (rcWaveforms.contains(e->pos()))
{
menu.addAction(m_mainS->actions()->viewZoomIn);
menu.addAction(m_mainS->actions()->viewZoomOut);
menu.addAction(m_mainS->actions()->viewZoomFull);
}
else
{
}
}
if (menu.actions().size() > 0)
{
QPoint ptGlobal = mapToGlobal(e->pos());
QAction* act = menu.exec(ptGlobal);
if (act == NULL)
;
else if (act == actAddPeakEndPoint)
{
addEadPeakXYEndPoint(vwi, info.iChosenPeak);
}
else if (act == actAddPeakMarker)
{
if (info.didxPossiblePeak >= 0)
vwi->choosePeakAtDidx(info.didxPossiblePeak);
else
addMarker(vwi, ptPixmap.x());
}
else if (act == actAddTimeMarker)
{
addMarker(vwi, MarkerType_Time, ptPixmap.x());
}
else if (act == actRemoveMarker)
{
if (info.iChosenPeak >= 0)
vwi->unchoosePeakAtIndex(info.iChosenPeak);
}
//.........这里部分代码省略.........
示例6: editorEvent
//-----------------------------------------------------------------------------
// Function: AddressDelegate::editorEvent()
//-----------------------------------------------------------------------------
bool AddressDelegate::editorEvent(QEvent* event, QAbstractItemModel* model,
QStyleOptionViewItem const& option, QModelIndex const& index)
{
Q_ASSERT(event);
Q_ASSERT(model);
// Always reset the ad-hoc group modify flag.
if (event->type() == QEvent::MouseButtonRelease)
{
groupModify_ = false;
}
// Make sure that the item is checkable.
Qt::ItemFlags flags = model->flags(index);
if (!(flags & Qt::ItemIsEnabled) || index.column() != ADDRESS_COL_LOCKED)
{
return false;
}
// Make sure that we have a check state.
QVariant value = index.data(Qt::UserRole);
if (!value.isValid())
{
return false;
}
bool newState = value.toBool();
// Handle the mouse button events.
if (event->type() == QEvent::MouseButtonPress)
{
const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
option.decorationSize,
QRect(option.rect.x() + (2 * textMargin), option.rect.y(),
option.rect.width() - (2 * textMargin),
option.rect.height()));
if (!checkRect.contains(static_cast<QMouseEvent*>(event)->pos()))
{
return false;
}
newState = !value.toBool();
groupModify_ = true;
groupState_ = newState;
}
else if (event->type() == QEvent::MouseMove)
{
if (!groupModify_ || value.toBool() == groupState_)
{
return false;
}
const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
option.decorationSize,
QRect(option.rect.x() + (2 * textMargin), option.rect.y(),
option.rect.width() - (2 * textMargin),
option.rect.height()));
if (!checkRect.contains(static_cast<QMouseEvent*>(event)->pos()))
{
return false;
}
newState = groupState_;
}
else if (event->type() == QEvent::KeyPress)
{
if (static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space &&
static_cast<QKeyEvent*>(event)->key() != Qt::Key_Select)
{
return false;
}
}
else
{
return false;
}
return model->setData(index, newState, Qt::UserRole);
}
示例7: handleMouseEvent
void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
{
static const QEvent::Type contextMenuTrigger =
QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ContextMenuOnMouseRelease).toBool() ?
QEvent::MouseButtonRelease : QEvent::MouseButtonPress;
if (qApp->d_func()->inPopupMode()) {
QWidget *activePopupWidget = qApp->activePopupWidget();
QPoint mapped = event->pos();
if (activePopupWidget != m_widget)
mapped = activePopupWidget->mapFromGlobal(event->globalPos());
bool releaseAfter = false;
QWidget *popupChild = activePopupWidget->childAt(mapped);
if (activePopupWidget != qt_popup_down) {
qt_button_down = 0;
qt_popup_down = 0;
}
switch (event->type()) {
case QEvent::MouseButtonPress:
case QEvent::MouseButtonDblClick:
qt_button_down = popupChild;
qt_popup_down = activePopupWidget;
break;
case QEvent::MouseButtonRelease:
releaseAfter = true;
break;
default:
break; // nothing for mouse move
}
int oldOpenPopupCount = openPopupCount;
if (activePopupWidget->isEnabled()) {
// deliver event
qt_replay_popup_mouse_event = false;
QWidget *receiver = activePopupWidget;
QPoint widgetPos = mapped;
if (qt_button_down)
receiver = qt_button_down;
else if (popupChild)
receiver = popupChild;
if (receiver != activePopupWidget)
widgetPos = receiver->mapFromGlobal(event->globalPos());
QWidget *alien = receiver;
#if !defined(Q_OS_OSX) && !defined(Q_OS_IOS) // Cocoa tracks popups
const bool reallyUnderMouse = activePopupWidget->rect().contains(mapped);
const bool underMouse = activePopupWidget->underMouse();
if (activePopupWidget != m_widget || (!underMouse && qt_button_down)) {
// If active popup menu is not the first-level popup menu then we must emulate enter/leave events,
// because first-level popup menu grabs the mouse and enter/leave events are delivered only to it
// by QPA. Make an exception for first-level popup menu when the mouse button is pressed on widget.
if (underMouse != reallyUnderMouse) {
if (reallyUnderMouse) {
QApplicationPrivate::dispatchEnterLeave(receiver, Q_NULLPTR, event->screenPos());
qt_last_mouse_receiver = receiver;
} else {
QApplicationPrivate::dispatchEnterLeave(Q_NULLPTR, qt_last_mouse_receiver, event->screenPos());
qt_last_mouse_receiver = receiver;
receiver = activePopupWidget;
}
}
} else if (!reallyUnderMouse) {
alien = Q_NULLPTR;
}
#endif
QMouseEvent e(event->type(), widgetPos, event->windowPos(), event->screenPos(),
event->button(), event->buttons(), event->modifiers(), event->source());
e.setTimestamp(event->timestamp());
QApplicationPrivate::sendMouseEvent(receiver, &e, alien, receiver->window(), &qt_button_down, qt_last_mouse_receiver);
qt_last_mouse_receiver = receiver;
} else {
// close disabled popups when a mouse button is pressed or released
switch (event->type()) {
case QEvent::MouseButtonPress:
case QEvent::MouseButtonDblClick:
case QEvent::MouseButtonRelease:
activePopupWidget->close();
break;
default:
break;
}
}
if (qApp->activePopupWidget() != activePopupWidget
&& qt_replay_popup_mouse_event
&& QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ReplayMousePressOutsidePopup).toBool()) {
if (m_widget->windowType() != Qt::Popup)
qt_button_down = 0;
if (event->type() == QEvent::MouseButtonPress) {
// the popup disappeared, replay the mouse press event
QWidget *w = QApplication::widgetAt(event->globalPos());
if (w && !QApplicationPrivate::isBlockedByModal(w)) {
// activate window of the widget under mouse pointer
if (!w->isActiveWindow()) {
w->activateWindow();
w->raise();
}
//.........这里部分代码省略.........
示例8: mouseMoveEvent
/*!
\reimp
*/
void QxtSpanSlider::mouseMoveEvent(QMouseEvent* event)
{
if (qxt_d().lowerPressed != QStyle::SC_SliderHandle && qxt_d().upperPressed != QStyle::SC_SliderHandle)
{
event->ignore();
return;
}
QStyleOptionSlider opt;
qxt_d().initStyleOption(&opt);
const int m = style()->pixelMetric(QStyle::PM_MaximumDragDistance, &opt, this);
int newPosition = qxt_d().pixelPosToRangeValue(qxt_d().pick(event->pos()) - qxt_d().offset);
if (m >= 0)
{
const QRect r = rect().adjusted(-m, -m, m, m);
if (!r.contains(event->pos()))
{
newPosition = qxt_d().position;
}
}
// pick the preferred handle on the first movement
if (qxt_d().firstMovement)
{
if (qxt_d().lower == qxt_d().upper)
{
if (newPosition < lowerValue())
{
qxt_d().swapControls();
qxt_d().firstMovement = false;
}
}
else
{
qxt_d().firstMovement = false;
}
}
if (qxt_d().lowerPressed == QStyle::SC_SliderHandle)
{
if (qxt_d().movement == NoCrossing)
newPosition = qMin(newPosition, upperValue());
else if (qxt_d().movement == NoOverlapping)
newPosition = qMin(newPosition, upperValue() - 1);
if (qxt_d().movement == FreeMovement && newPosition > qxt_d().upper)
{
qxt_d().swapControls();
setUpperPosition(newPosition);
}
else
{
setLowerPosition(newPosition);
}
}
else if (qxt_d().upperPressed == QStyle::SC_SliderHandle)
{
if (qxt_d().movement == NoCrossing)
newPosition = qMax(newPosition, lowerValue());
else if (qxt_d().movement == NoOverlapping)
newPosition = qMax(newPosition, lowerValue() + 1);
if (qxt_d().movement == FreeMovement && newPosition < qxt_d().lower)
{
qxt_d().swapControls();
setLowerPosition(newPosition);
}
else
{
setUpperPosition(newPosition);
}
}
event->accept();
}
示例9: editorEvent
bool PluginItemDelegate::editorEvent( QEvent *event,
QAbstractItemModel *model,
const QStyleOptionViewItem &option,
const QModelIndex &index )
{
Q_ASSERT(event);
Q_ASSERT(model);
if ( ( event->type() == QEvent::MouseButtonRelease )
|| ( event->type() == QEvent::MouseButtonDblClick )
|| ( event->type() == QEvent::MouseButtonPress )
|| ( event->type() == QEvent::MouseMove ) )
{
QMouseEvent *me = static_cast<QMouseEvent*>(event);
QPoint mousePosition = me->pos() - option.rect.topLeft();
if ( ( event->type() == QEvent::MouseMove )
&& !( me->buttons() & Qt::LeftButton ) )
{
// If the mouse moves around and no left button is pressed, no pushbutton is pressed
// and no other event will be successful.
m_aboutPressedIndex = QModelIndex();
m_configPressedIndex = QModelIndex();
return true;
}
// Handle checkbox
QRect checkRect = checkboxOption( option, index, 0, Qt::AlignLeft ).rect;
if ( checkRect.contains( mousePosition )
&& ( ( event->type() == QEvent::MouseButtonDblClick )
|| ( event->type() == QEvent::MouseButtonRelease ) ) )
{
// make sure that the item is checkable
Qt::ItemFlags flags = model->flags(index);
if ( !( flags & Qt::ItemIsUserCheckable ) || !( option.state & QStyle::State_Enabled )
|| !( flags & Qt::ItemIsEnabled ) )
return false;
// make sure that we have a check state
QVariant checkValue = index.data( Qt::CheckStateRole );
if ( !checkValue.isValid() )
return false;
// eat the double click events inside the check rect
if ( event->type() == QEvent::MouseButtonDblClick )
return true;
Qt::CheckState state = ( static_cast<Qt::CheckState>( checkValue.toInt() ) == Qt::Checked
? Qt::Unchecked : Qt::Checked );
return model->setData(index, state, Qt::CheckStateRole);
}
if ( ( event->type() == QEvent::MouseMove )
&& !( me->buttons() & Qt::LeftButton ) )
{
m_aboutPressedIndex = QModelIndex();
m_configPressedIndex = QModelIndex();
return true;
}
QPoint topRight = option.rect.topRight();
// Handle aboutButton
{
QRect aboutRect = buttonOption( option,
index,
PluginItemDelegate::About,
topRight.x(),
Qt::AlignRight ).rect;
if ( aboutRect.contains( mousePosition ) ) {
if ( event->type() == QEvent::MouseButtonDblClick )
return true;
if ( event->type() == QEvent::MouseButtonPress ) {
m_aboutPressedIndex = index;
m_configPressedIndex = QModelIndex();
return true;
}
if ( event->type() == QEvent::MouseButtonRelease ) {
m_aboutPressedIndex = QModelIndex();
m_configPressedIndex = QModelIndex();
emit aboutPluginClicked( index );
return true;
}
if ( event->type() == QEvent::MouseMove ) {
if ( me->buttons() & Qt::LeftButton ) {
m_aboutPressedIndex = index;
m_configPressedIndex = QModelIndex();
return true;
}
else {
m_aboutPressedIndex = QModelIndex();
m_configPressedIndex = QModelIndex();
return true;
}
}
}
else {
// If the mouse is on the item and the mouse isn't above the button.
// no about button is pressed.
m_aboutPressedIndex = QModelIndex();
//.........这里部分代码省略.........
示例10: editorEvent
bool BridgesDelegate::editorEvent( QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index ) {
Q_ASSERT(event);
Q_ASSERT(model);
// Always reset the ad-hoc group modify flag.
if (event->type() == QEvent::MouseButtonRelease)
{
opaqueGroupModify_ = false;
}
// Make sure that the item is checkable.
Qt::ItemFlags flags = model->flags(index);
if (!(flags & Qt::ItemIsUserCheckable) || !(flags & Qt::ItemIsEnabled))
{
return false;
}
// Make sure that we have a check state.
QVariant value = index.data(Qt::CheckStateRole);
if (!value.isValid())
{
return false;
}
Qt::CheckState newState = static_cast<Qt::CheckState>(value.toInt());
// Handle the mouse button events.
if (event->type() == QEvent::MouseButtonPress)
{
const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
option.decorationSize,
QRect(option.rect.x() + (2 * textMargin), option.rect.y(),
option.rect.width() - (2 * textMargin),
option.rect.height()));
if (!checkRect.contains(static_cast<QMouseEvent*>(event)->pos()))
{
return false;
}
newState = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked ? Qt::Unchecked : Qt::Checked);
opaqueGroupModify_ = true;
opaque = newState;
}
else if (event->type() == QEvent::MouseMove)
{
if (!opaqueGroupModify_ || static_cast<Qt::CheckState>(value.toInt()) == opaque)
{
return false;
}
const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
option.decorationSize,
QRect(option.rect.x() + (2 * textMargin), option.rect.y(),
option.rect.width() - (2 * textMargin),
option.rect.height()));
if (!checkRect.contains(static_cast<QMouseEvent*>(event)->pos()))
{
return false;
}
newState = opaque;
}
else if (event->type() == QEvent::KeyPress)
{
if (static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space &&
static_cast<QKeyEvent*>(event)->key() != Qt::Key_Select)
{
return false;
}
}
else
{
return false;
}
return model->setData(index, newState, Qt::CheckStateRole);
}
示例11: findRulerHandle
int Hruler::findRulerHandle(QPoint mp, double grabRadius)
{
int mx = mp.x();
QRect fpo;
int result = rc_none;
int Pos = textPosToLocal(0);
if (Pos-1 < (mx + grabRadius) && Pos-1 > (mx - grabRadius))
result = rc_leftFrameDist;
Pos = textPosToLocal(textWidth());
if (Pos+1 < (mx + grabRadius) && Pos+1 > (mx - grabRadius))
result = rc_rightFrameDist;
double ColWidth = (textWidth() - ColGap * (Cols - 1)) / Cols;
ActCol = 0;
for (int CurrCol = 0; CurrCol < Cols; ++CurrCol)
{
Pos = textPosToLocal((ColWidth+ColGap)*CurrCol);
fpo = QRect(Pos, topline, static_cast<int>(ColWidth*Scaling), rulerheight);
if (fpo.contains(mp))
{
ActCol = CurrCol+1;
break;
}
}
if (ActCol == 0)
{
ActCol = 1;
return result;
}
Pos = textPosToLocal(First+Indent+(ColWidth+ColGap)*(ActCol-1));
fpo = QRect(Pos-1, topline, grabRadius+1, rulerheight/2);
if (fpo.contains(mp))
{
return rc_indentFirst;
}
Pos = textPosToLocal(Indent+(ColWidth+ColGap)*(ActCol-1));
fpo = QRect(Pos-1, midline, grabRadius+1, rulerheight/2);
if (fpo.contains(mp))
{
return rc_leftMargin;
}
Pos = textPosToLocal(RMargin+(ColWidth+ColGap)*(ActCol-1));
fpo = QRect(Pos-grabRadius, midline, grabRadius, rulerheight/2);
if (fpo.contains(mp))
{
return rc_rightMargin;
}
if (TabValues.count() != 0)
{
for (int yg = 0; yg < signed(TabValues.count()); yg++)
{
Pos = textPosToLocal(TabValues[yg].tabPosition+(ColWidth+ColGap)*(ActCol-1));
fpo = QRect(Pos-grabRadius, tabline, 2*grabRadius, rulerheight/2 + 2);
if (fpo.contains(mp))
{
result = rc_tab;
ActTab = yg;
break;
}
}
}
return result;
}
示例12: paintEvent
void LuminanceRangeWidget::paintEvent( QPaintEvent *pe )
{
{
QPainter p( this );
QRect fRect = getPaintRect();
if( fRect.width() < 50 ) // Does not make sense to paint anything
return;
// Paint range window
{
int x1, x2;
x1 = getWindowX( draggedMin() );
x2 = getWindowX( draggedMax() );
QColor selectionColor = mouseDragStart == DRAGNOTSTARTED ?
QColor( 0, 100, 255 ) : QColor( 0, 150, 255 );
p.fillRect( x1, fRect.top(), x2-x1, fRect.height(), QBrush( selectionColor ) );
}
// Paint histogram
if( histogramImage != NULL ) {
if( histogram == NULL || histogram->getBins() != fRect.width() ) {
delete histogram;
// Build histogram from at least 5000 pixels
int accuracy = histogramImage->getRows()*histogramImage->getCols()/5000;
if( accuracy < 1 ) accuracy = 1;
histogram = new Histogram( fRect.width(), accuracy );
histogram->computeLog( histogramImage, minValue, maxValue );
}
float maxP = histogram->getMaxP();
int i = 0;
p.setPen( Qt::green );
for( int x = fRect.left(); i < histogram->getBins(); x++, i++ ) {
if( histogram->getP(i) > 0 ) {
int barSize = (int)((float)fRect.height() * histogram->getP(i)/maxP);
p.drawLine( x, fRect.bottom(), x, fRect.bottom() - barSize );
}
}
}
// Paint scale
QFont labelFont( "SansSerif", 8 );
p.setFont( labelFont );
p.setPen( Qt::black );
QRect textBounding = p.boundingRect( fRect, Qt::AlignHCenter|Qt::AlignBottom, "-8" );
for( float x = ceil( minValue ); x <= floor( maxValue ); x++ ) {
int rx = getWindowX(x);
p.drawLine( rx, fRect.top(), rx, textBounding.top() );
char str[10];
sprintf( str, "%g", x );
p.drawText( rx-20, textBounding.top(), 40, textBounding.height(),
Qt::AlignHCenter|Qt::AlignBottom, str );
}
// Paint value pointer
if( showVP )
{
int x = getWindowX( valuePointer );
if( fRect.contains( x, fRect.y() ) ) {
p.setPen( Qt::yellow );
p.drawLine( x, fRect.top(), x, fRect.bottom() );
}
}
}
QFrame::paintEvent(pe);
}
示例13: nonClientAreaMouseEvent
void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event)
{
Q_Q(QDockWidget);
int fw = q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, q);
QRect geo = q->geometry();
QRect titleRect = q->frameGeometry();
#ifdef Q_WS_MAC
if ((features & QDockWidget::DockWidgetVerticalTitleBar)) {
titleRect.setTop(geo.top());
titleRect.setBottom(geo.bottom());
titleRect.setRight(geo.left() - 1);
} else
#endif
{
titleRect.setLeft(geo.left());
titleRect.setRight(geo.right());
titleRect.setBottom(geo.top() - 1);
titleRect.adjust(0, fw, 0, 0);
}
switch (event->type()) {
case QEvent::NonClientAreaMouseButtonPress:
if (!titleRect.contains(event->globalPos()))
break;
if (state != 0)
break;
if (qobject_cast<QMainWindow*>(parent) == 0)
break;
if (isAnimating())
break;
initDrag(event->pos(), true);
if (state == 0)
break;
#ifdef Q_OS_WIN
// On Windows, NCA mouse events don't contain modifier info
state->ctrlDrag = GetKeyState(VK_CONTROL) & 0x8000;
#else
state->ctrlDrag = event->modifiers() & Qt::ControlModifier;
#endif
startDrag();
break;
case QEvent::NonClientAreaMouseMove:
if (state == 0 || !state->dragging)
break;
if (state->nca) {
endDrag();
}
#ifdef Q_OS_MAC
else { // workaround for lack of mouse-grab on Mac
QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
Q_ASSERT(layout != 0);
q->move(event->globalPos() - state->pressPos);
if (!state->ctrlDrag)
layout->hover(state->widgetItem, event->globalPos());
}
#endif
break;
case QEvent::NonClientAreaMouseButtonRelease:
#ifdef Q_OS_MAC
if (state)
endDrag();
#endif
break;
case QEvent::NonClientAreaMouseButtonDblClick:
_q_toggleTopLevel();
break;
default:
break;
}
}
示例14: mouseReleaseEvent
void GradientPreview::mouseReleaseEvent(QMouseEvent *m)
{
if (isEditable)
{
QRect fpo;
if (m->button() == Qt::LeftButton)
{
if ((Mpressed) && (ActStop > 0) && (ActStop != static_cast<int>(StopM.count()-1)) && (outside || m->y() > 60))
{
onlyselect = false;
fill_gradient.removeStop(ActStop);
ActStop = 0;
repaint();
QList<VColorStop*> cstops = fill_gradient.colorStops();
emit selectedStop(cstops.at(ActStop));
}
if ((m->y() < height()) && (m->y() > 43) && (m->x() > 0) && (m->x() < width()) && (ActStop == -1))
{
QList<VColorStop*> cstops = fill_gradient.colorStops();
double newStop = static_cast<double>((m->x() - 10)) / (static_cast<double>(width())-20);
QColor stopColor = (cstops.count() > 0) ? cstops.at(0)->color : QColor(255, 255, 255);
QString stopName = (cstops.count() > 0) ? cstops.at(0)->name : QString("White");
int stopShade = (cstops.count() > 0) ? cstops.at(0)->shade : 100;
fill_gradient.addStop(stopColor, newStop, 0.5, 1.0, stopName, stopShade);
repaint();
onlyselect = false;
cstops = fill_gradient.colorStops();
for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg)
{
fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13);
if (fpo.contains(m->pos()))
{
ActStop = yg;
emit selectedStop(cstops.at(ActStop));
repaint();
break;
}
}
}
}
else if (m->button() == Qt::RightButton)
{
Mpressed = false;
QList<VColorStop*> cstops = fill_gradient.colorStops();
int stop = -1;
for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg)
{
fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13);
if (fpo.contains(m->pos()))
{
stop = yg;
break;
}
}
contextStop = stop;
mPos = m->pos();
QMenu *pmen = new QMenu();
qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
pmen->addAction( tr("Add Stop"), this, SLOT(addStop()));
if (stop != -1)
pmen->addAction( tr("Remove Stop"), this, SLOT(removeStop()));
pmen->exec(QCursor::pos());
delete pmen;
}
}
Mpressed = false;
if (!onlyselect)
emit gradientChanged();
}
示例15: calculateLineProfile
void LineProfileTool::calculateLineProfile(const QPoint& start, const QPoint& end)
{
QRect rect = d_target->geometry();
if (!rect.contains(start) || !rect.contains(end)){
QMessageBox::warning(d_graph, tr("QtiPlot - Pixel selection warning"),
tr("Please select the end line point inside the image rectangle!"));
return;
}
QPoint o = d_target->pos();
QPixmap pic = d_target->pixmap();
QImage image = pic.convertToImage();
int x1 = start.x()-o.x();
int x2 = end.x()-o.x();
int y1 = start.y()-o.y();
int y2 = end.y()-o.y();
QSize realSize = pic.size();
QSize actualSize = d_target->size();
if (realSize != actualSize){
double ratioX = (double)realSize.width()/(double)actualSize.width();
double ratioY = (double)realSize.height()/(double)actualSize.height();
x1 = int(x1*ratioX);
x2 = int(x2*ratioX);
y1 = int(y1*ratioY);
y2 = int(y2*ratioY);
}
QString text = tr("pixel") + "\tx\ty\t" + tr("intensity") + "\n";
//uses the fast Bresenham's line-drawing algorithm
#define sgn(x) ((x<0)?-1:((x>0)?1:0))
int i = 0, n = 0;
int dx = x2 - x1; //the horizontal distance of the line
int dy = y2 - y1; //the vertical distance of the line
int dxabs = abs(dx);
int dyabs = abs(dy);
int sdx = sgn(dx);
int sdy = sgn(dy);
int x = dyabs >> 1;
int y = dxabs >> 1;
int px = x1;
int py = y1;
if (dxabs>=dyabs){ //the line is more horizontal than vertical
for(i=0;i<dxabs;i++){
y+=dyabs;
if (y>=dxabs){
y-=dxabs;
py+=sdy;
}
px+=sdx;
n=dxabs;
text+=QString::number(i)+"\t";
text+=QString::number(px)+"\t";
text+=QString::number(py)+"\t";
text+=QString::number(averageImagePixel(image, px, py, true))+"\n";
}
} else {// the line is more vertical than horizontal
for(i=0;i<dyabs;i++){
x+=dxabs;
if (x>=dyabs){
x-=dyabs;
px+=sdx;
}
py+=sdy;
n=dyabs;
text+=QString::number(i)+"\t";
text+=QString::number(px)+"\t";
text+=QString::number(py)+"\t";
text+=QString::number(averageImagePixel(image, px, py, false))+"\n";
}
}
Table *t = d_app->newTable(tr("Table") + "1", n, 4, text);
MultiLayer* plot = d_app->multilayerPlot(t, QStringList(QString(t->objectName())+"_intensity"), 0);
Graph *g = (Graph*)plot->activeLayer();
if (g){
g->setTitle("");
g->setXAxisTitle(tr("pixels"));
g->setYAxisTitle(tr("pixel intensity (a.u.)"));
}
}