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

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

14.08.2014, 04:27. Просмотров 554. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Почему данный код показывает сообщение о движении мышки, только один раз? (C++ Qt):

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

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

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

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

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

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

1
NEbO
591 / 458 / 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
Привет! Вот еще темы с решениями:

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

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

Почему InvokeRepeating отрабатывает только один раз?
Здравствуйте! Изучаю Unity3D и наткнулся на интересный туториал:...

Я не понимаю почему работает только один раз
по идеи код должен выполнятся бесконечность раз, но почему то работает только...


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

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

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