Russian Qt Forum
Июнь 03, 2024, 20:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу разобраться с MouseMoveEvent  (Прочитано 9686 раз)
HoneyDimon
Гость
« : Февраль 25, 2015, 05:40 »

Прошу помощи.
Решил разобраться с void MouseMoveEvent(QEvent *);
конечно вначале почитал и маны и примеры. но в элементарной программе не работает. Подскажите где затык.
проект создаю в Qt Creatore, стандартное приложение QMainWindow.
код ниже:
Код:

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMouseEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void mouseMoveEvent(QEvent * event);


private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindows.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setMouseTracking(true);
    centralWidget()->setMouseTracking(true);
   
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::mouseMoveEvent(QEvent *event)
{
    qDebug() << "1111111111111";
}


ui_mainvindow.h
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.2.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QStringLiteral("MainWindow"));
        MainWindow->resize(400, 300);
        MainWindow->setMouseTracking(true);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QStringLiteral("centralWidget"));
        MainWindow->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QStringLiteral("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 400, 21));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
        MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QStringLiteral("statusBar"));
        MainWindow->setStatusBar(statusBar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H



mainwindow.ui, сгенерирована креатором, прпосто один главный виджет, и не работает.
Подскажите в чем засада ?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Февраль 25, 2015, 07:55 »

Код
C++ (Qt)
void MainWindow::mouseMoveEvent(QEvent *event)
{
   qDebug() << "1111111111111";
 
   QMainWindow::mouseMoveEvent(event);
}
Записан

HoneyDimon
Гость
« Ответ #2 : Февраль 25, 2015, 09:32 »

Неправда Ваша, так тоже не работает и логика абсолютно не ясна !

Код:
void MainWindow::mouseMoveEvent(QEvent *event)
{
    qDebug() << "1111111111111";
    QMouseEvent *MousEvent = static_cast<QMouseEvent*>(event);
    QMainWindow::mouseMoveEvent(MousEvent);
}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Февраль 25, 2015, 09:32 »

просто один главный виджет, и не работает.
Нет, есть centralWidget, поэтому до MainWindow дело не доходит. Попробуйте  
Код
C++ (Qt)
centralWidget->setAttribute(Qt::WA_TransparentForMouseEvents);
Записан
HoneyDimon
Гость
« Ответ #4 : Февраль 25, 2015, 10:20 »

Так тоже не работает. вроде по логике все просто.
Есть класс MainWindow наследуемый от QMainWindow.
В нем переопределена функция MouseMoveEvent.при перемещении мышки должна вызываться переопределенная функция, но почему то не вызывается Грустный
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Февраль 25, 2015, 10:29 »

Проект выложите, посмотрим
Записан
HoneyDimon
Гость
« Ответ #6 : Февраль 25, 2015, 10:42 »

Вот, проект Qt 5.2
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Февраль 25, 2015, 10:48 »

Неправда Ваша, так тоже не работает и логика абсолютно не ясна !

Код:
void MainWindow::mouseMoveEvent(QEvent *event)
{
    qDebug() << "1111111111111";
    QMouseEvent *MousEvent = static_cast<QMouseEvent*>(event);
    QMainWindow::mouseMoveEvent(MousEvent);
}

У функции mouseMoveEvent тип параметра QMouseEvent *
Записан

HoneyDimon
Гость
« Ответ #8 : Февраль 25, 2015, 11:20 »

 Да с этим уже разобрался, спасибо. mouseMoveEvent(QEvent *ev) - неверно и работать не будет! Правильно: mouseMoveevent(QMouseEvent *ev) - так работает. Изза невнимательности убил кучу времени. Еще раз всем спасибо! копаю дальше.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Февраль 25, 2015, 11:39 »

Да с этим уже разобрался, спасибо. mouseMoveEvent(QEvent *ev) - неверно и работать не будет! Правильно: mouseMoveevent(QMouseEvent *ev) - так работает. Изза невнимательности убил кучу времени. Еще раз всем спасибо! копаю дальше.
Коли так обжёгся, возьми за правило добавлять спецификатор "override" и забудешь про такие проблемы.
Правда, применимо только с C++11.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Февраль 25, 2015, 11:57 »

Коли так обжёгся, возьми за правило добавлять спецификатор "override" и забудешь про такие проблемы.
Правда, применимо только с C++11.
Дв, хорошая вещь. Можно и варнинг "hide virtual.." включить, но он не поможет если перепутал имя метода
« Последнее редактирование: Февраль 25, 2015, 11:59 от Igors » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Февраль 25, 2015, 12:01 »

Дв, хорошая вещь. Можно и варнинг "override virtual.." включить, но он не поможет если перепутал имя метода
Ещё как поможет, если заюзал имя несуществующего виртуального метода.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.161 секунд. Запросов: 23.