Вот функции мыша визира:
class VFFrame: public QFrame
{
//.....................
bool _is_left_pressed; ///< флаг указания нажатия на левую кнопку мыши
//.....................
virtual void mousePressEvent(QMouseEvent* events);
virtual void mouseMoveEvent(QMouseEvent* events);
virtual void mouseReleaseEvent(QMouseEvent* events);
};
/// Переопределение нажатия на лекую кнопку мыши
void VFFrame::mousePressEvent(QMouseEvent* events)
{
QFrame::mousePressEvent(events);
switch(events -> button())
{
case Qt::LeftButton: ///< если нажата левая кнопка мыши
_is_left_pressed = true;
break;
}
}
/// Передвижение визира вслед за мышью
void VFFrame::mouseMoveEvent(QMouseEvent* events)
{
QFrame::mouseMoveEvent(events);
if(!_is_left_pressed) return;
move(events -> pos());
}
/// Отпускание кнопки мыши
void VFFrame::mouseReleaseEvent(QMouseEvent* events)
{
QFrame::mouseReleaseEvent(events);
if(!_is_left_pressed) return;
_is_left_pressed = false;
setGeometry(events -> pos().x(), y(), width(), height());
}
Вот функция создания визира в виджете:
/// Создание и отображение вертикального визира
void GraphicDisplay::verticalViewfinder()
{
if(v_viewfinderAction -> isChecked())
{
VFFrame* finder(new VFFrame(paramsDisplay, QFrame::VLine));
gridLayout -> addWidget(finder, 0, 0, 1, 1);
}
}