В 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
Подсветил красным то, что добавил.
Т.е. на данном этапе хочу просто, чтобы Лейбл появилась, а поом уже в прроцедуре Евент распишу чо-нить...
QT4. Хочу отследить положение мыши.
Модератор: Модераторы разделов
-
- Сообщения: 120
- ОС: Kubuntu 10, винды
QT4. Хочу отследить положение мыши.
Люди - смертные Боги!
-
- Сообщения: 120
- ОС: Kubuntu 10, винды
Re: QT4. Хочу отследить положение мыши.
Поправил немного, т.е. снёс свой класс и переопределил виртуальный метод для всего окна. Ошибки теперь не выдаёт. Как теперь вывести что-нить в заголовке окна при перемещении мыши над окошком\кнопкой\другими элементами?
Код
#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
Код
#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
Люди - смертные Боги!
-
- Сообщения: 115
- ОС: ubuntu
Re: QT4. Хочу отследить положение мыши.
решил попробовать, вот что получилось
так работает. Сначала попробовал без setMouseTracking(), но срабатывало не сразу (заголовок менялся не сразу и при каких-то пока неизвестных мне условиях). Так же работает на ура
http://doc.qt.nokia.com/4.6/eventsandfilters.html - можно почитать на тему событий в Qt
p.s. В доке написано насчет mouseTracking, что в случае false (по умолчанию) событие возбуждается только когда была нажата хотя бы одна кнопка во время движения.
Код: Выделить всё
#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 (по умолчанию) событие возбуждается только когда была нажата хотя бы одна кнопка во время движения.
-
- Сообщения: 120
- ОС: Kubuntu 10, винды
Re: QT4. Хочу отследить положение мыши.
Спасибо, у меня тож как-то работает...
Походу буду читать о классах в раз десятый наверное... и о кьют ещё не один раз...
Походу буду читать о классах в раз десятый наверное... и о кьют ещё не один раз...

Люди - смертные Боги!
-
- Сообщения: 115
- ОС: ubuntu
Re: QT4. Хочу отследить положение мыши.
сейчас перечитал название темы и собственно вопрос: ответ-то я несколько не тот дал. Надеюсь, вы нашли, что для получения координат мышки относительно окна нужно получать при помощи QMouseEvent::pos()
-
- Сообщения: 120
- ОС: Kubuntu 10, винды
Re: QT4. Хочу отследить положение мыши.
идею я понял...
просто в с++ не силён сильно), вот и сложно понять)
просто в с++ не силён сильно), вот и сложно понять)
Люди - смертные Боги!
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: QT4. Хочу отследить положение мыши.
Чтобы не переопределять для каждого виджета метод mouseMoveEvent() можно установить на экземпляр QApplication собственный фильтр событий и в нем отлавливать движение мышкой над _каждым_ виджетом.