Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
poss
Заблокирован
#1

Почему данный код показывает сообщение о движении мышки, только один раз?

14.08.2014, 04:27. Просмотров 564. Ответов 1
Метки нет (Все метки)

Почему данный код показывает сообщение о движении мышки, только один раз?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qwebframe.h"
#include "QWebElementCollection"
#include "QtWebKitWidgets/qwebview.h"
#include "QDebug"
#include "QMouseEvent"
#include "QPainter"
#include "QPaintEvent"
#include "QPointF"
#include "QPalette"
#include <QtGui>
#include "QWebFrame"
#include <QDesktopServices>
#include <QUrl>
#include "QToolTip"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    this->installEventFilter(this);
}
 
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
  if (event->type() == QEvent::MouseMove)
  {
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    qDebug() << QString("Mouse move (%1,%2)").arg(mouseEvent->pos().x()).arg(mouseEvent->pos().y());
  }
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
По другому сделал, работает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "ui_mainwindow.h"
#include "qwebframe.h"
#include "QWebElementCollection"
#include "QtWebKitWidgets/qwebview.h"
#include "QDebug"
#include "QMouseEvent"
#include "QPainter"
#include "QPaintEvent"
#include "QPointF"
#include "QPalette"
#include <QtGui>
#include "QWebFrame"
#include <QDesktopServices>
#include <QUrl>
#include "QToolTip"
#include <QApplication>
#include <QMouseEvent>
#include <QTransform>
#include <QLabel>
#include "QTimer"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    //QDesktopServices::openUrl(QUrl("https://vk.com"));
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(position()));
    timer->start(1000);
}
void MainWindow::position(){
 
    qDebug() << QCursor::pos();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 04:27
Ответы с готовыми решениями:

Почему функция вызывается один раз, а не бесконечное число раз
Программа показывает, как работать с анимацией цвета. Мы берём случайный цвет и медленно изменяем...

Почему данный код, разбирает txt файл не полностью?
txt файл, содержит emails: QStringList methods::readFileLogin(){ QStringList fields; ...

Почему код запускается только один раз?
Всем привет. Кто знает почему этот код запускается только 1 раз? $(function() {...

Код на заполнение Word срабатывает только один раз. Почему?
Код на заполнение Word срабатывает только один первый раз. Потом нужно выйти-зайти в базу чтобы...

Прога готовая(код Цезаря),надо сделать только чтоб шаг спрашивался только один раз).
program Caesar; function code(toCode:string):string; var x,y,n:integer; begin writeln('shag...

1
NEbO
593 / 460 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 3
14.08.2014, 04:45 #2
можно так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
bool MainWindow::eventFilter(QObject *obj, QEvent *evt) {
//    qDebug() << evt->type();
    if (evt->type() == QEvent::HoverMove) {
        QHoverEvent *mouseEvent = static_cast<QHoverEvent*>(evt);
        qDebug() << QString("Mouse move (%1,%2)").arg(mouseEvent->pos().x()).arg(mouseEvent->pos().y());
        return true;
    } else {
        return QMainWindow::eventFilter(obj, evt);
    }
}
или через mouseEvent:
C++ (Qt)
1
2
3
4
5
6
7
8
9
bool MainWindow::eventFilter(QObject *obj, QEvent *evt) {
    if (evt->type() == QEvent::MouseMove) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(evt);
        qDebug() << QString("Mouse move (%1,%2)").arg(mouseEvent->pos().x()).arg(mouseEvent->pos().y());
        return true;
    } else {
        return QMainWindow::eventFilter(obj, evt);
    }
}
Но(!) не забыв при этом включить
C++ (Qt)
1
setMouseTracking(true);
например, в конструкторе.

Не по теме:

и да, если что, система фильтров, вообщем-то предназначена для перехвата событий из другого объекта. например, для создания менеджера событий, или что-то в этом роде. Например, такой подход можно использовать в графическом редакторе при переключении инструментов рисования: каждый инструмент регистрирует собственный перехватчик событий на передвижения и кликанья мышкой. Ибо сам виджет, где происходит рисование, может и не уметь обрабатывать все инструменты (особенно, если они реализованы в виде внешних библиотек). для перехвата событий внутри самого себя, лучше все же перегружать метод mouseMoveEvent, ну естественно, не забыв включить все тот же mouseTracking.

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 04:45

уникальный код для входа на опрос. код действителен только один раз
Привет всем! возникла проблема типа &quot;как воплотить в жизнь&quot; в php. Сценарий такой: 600 человек...

Событие срабатывает только один раз. почему?
Есть два radioButton в одной группе. У каждого событие OnCheckedChanged protected void...

Почему setInterval срабатывает только один раз?
впервые столкнулся с этой функцией, и вот в чем проблема: new_image.style.opacity = 0.1;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru