QT4. Хочу отследить положение мыши.

Модератор: Модераторы разделов

Аватара пользователя
witus
Сообщения: 120
ОС: Kubuntu 10, винды

QT4. Хочу отследить положение мыши.

Сообщение witus »

В QT недавно. В классах не особо силён. Бьюсь уже целый день...

Нужно, например, выводить в заголовок окна координаты мышки при её перемещении над QLabel. Просто циферки.
Слоты и сигналы вроде не позволят. Читал, что можно унаследовать QLabel для моего нового класса..., далее пытаюсь событие Евент (движение мышки) как-то описать, но ошибка выскакивает... Запарило уже...(((

Помогите, плиз...
Вроде быстро можно всё поправить... вроде туплю с классами.
Вот код main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QGraphicsView>
#include <QtGui>
//using namespace Qt;

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QGraphicsView* POLE=new QGraphicsView(&w);
POLE->setGeometry(10,10,200,200);
POLE->show();
QPushButton* BBB=new QPushButton(&w);
BBB->setText("dfdfdf");
BBB->show();
w.show();
w.setWindowTitle("RASPISANIE");

ClassLabel *CL;
CL = new ClassLabel(&w);
return a.exec();
}

Строку, которая выдаёт ошибку подкрасил красным.

А вот код моуля mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>



namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

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

private:
Ui::MainWindow *ui;

};

class ClassLabel : public QLabel
{
Q_OBJECT
public:
ClassLabel(QWidget *pwgt = 0);

protected:
virtual void mouseMoveEvent(QMouseEvent* pe);

}



#endif // MAINWINDOW_H

Подсветил красным то, что добавил.


Т.е. на данном этапе хочу просто, чтобы Лейбл появилась, а поом уже в прроцедуре Евент распишу чо-нить...
Люди - смертные Боги!
Спасибо сказали:
Аватара пользователя
witus
Сообщения: 120
ОС: Kubuntu 10, винды

Re: QT4. Хочу отследить положение мыши.

Сообщение witus »

Поправил немного, т.е. снёс свой класс и переопределил виртуальный метод для всего окна. Ошибки теперь не выдаёт. Как теперь вывести что-нить в заголовке окна при перемещении мыши над окошком\кнопкой\другими элементами?
Код
#include "mainwindow.h"
#include "ui_mainwindow.h"

int sss=10;

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

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

void MainWindow::mouseMoveEvent(QMouseEvent* pe)
{

//пока ничего не выводится...
MainWindow::setWindowTitle("ddddddddddddddddddd");
}



И ещё
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>



namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

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

private:
Ui::MainWindow *ui;

protected:
virtual void mouseMoveEvent(QMouseEvent* pe);
};



#endif // MAINWINDOW_H

Люди - смертные Боги!
Спасибо сказали:
bl00dl1nes
Сообщения: 115
ОС: ubuntu

Re: QT4. Хочу отследить положение мыши.

Сообщение bl00dl1nes »

решил попробовать, вот что получилось

Код: Выделить всё

#include <QtCore>
#include <QtGui>

class MainWin: public QMainWindow {
protected:
    void mouseMoveEvent(QMouseEvent *event) {
        setWindowTitle("mouse event grabbed!");
    }
};


int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MainWin *win = new MainWin();
    win->setGeometry(100,100,500,500);
    win->setWindowTitle("normal title");
    win->setMouseTracking(true);
    win->show();
    return app.exec();
}

так работает. Сначала попробовал без setMouseTracking(), но срабатывало не сразу (заголовок менялся не сразу и при каких-то пока неизвестных мне условиях). Так же работает на ура

http://doc.qt.nokia.com/4.6/eventsandfilters.html - можно почитать на тему событий в Qt

p.s. В доке написано насчет mouseTracking, что в случае false (по умолчанию) событие возбуждается только когда была нажата хотя бы одна кнопка во время движения.
Спасибо сказали:
Аватара пользователя
witus
Сообщения: 120
ОС: Kubuntu 10, винды

Re: QT4. Хочу отследить положение мыши.

Сообщение witus »

Спасибо, у меня тож как-то работает...

Походу буду читать о классах в раз десятый наверное... и о кьют ещё не один раз... :wacko:
Люди - смертные Боги!
Спасибо сказали:
bl00dl1nes
Сообщения: 115
ОС: ubuntu

Re: QT4. Хочу отследить положение мыши.

Сообщение bl00dl1nes »

сейчас перечитал название темы и собственно вопрос: ответ-то я несколько не тот дал. Надеюсь, вы нашли, что для получения координат мышки относительно окна нужно получать при помощи QMouseEvent::pos()
Спасибо сказали:
Аватара пользователя
witus
Сообщения: 120
ОС: Kubuntu 10, винды

Re: QT4. Хочу отследить положение мыши.

Сообщение witus »

идею я понял...
просто в с++ не силён сильно), вот и сложно понять)
Люди - смертные Боги!
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: QT4. Хочу отследить положение мыши.

Сообщение RasenHerz »

Чтобы не переопределять для каждого виджета метод mouseMoveEvent() можно установить на экземпляр QApplication собственный фильтр событий и в нем отлавливать движение мышкой над _каждым_ виджетом.
Спасибо сказали: