![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
deluxe |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.11.2011 Пользователь №: 2987 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый вечер.
Необходимо реализовать программу, на основной форме которой будет одна кнопка и при наведении на неё кнопка будет перерисовываться в другое место. Не могли бы подсказать как это возможно реализовать. Я думаю для реализации программы необходимо отслеживать курсор мыши, но как это правильно сделать? Прочитал про функцию EnterEvent, но не до конца с ней разобрался. |
|
|
sidsukana |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 158 Регистрация: 23.12.2010 Из: Челябинск Пользователь №: 2296 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Скорей всего QMouseEvent
Переопредели в своем приложении этот ивент. В нем сравнивай globalPos () с позицией кнопки. Ну я бы с этого начал) |
|
|
deluxe |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.11.2011 Пользователь №: 2987 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Огромное спасибо.
Щас попытаюсь реализовать. |
|
|
ssoft |
![]()
Сообщение
#4
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Необходимо реализовать программу, на основной форме которой будет одна кнопка и при наведении на неё кнопка будет перерисовываться в другое место. Проще всего главной формой (на которой перемещается кнопка) фильтровать сообщения самой кнопки (см. void QObject::installEventFilter ( QObject * filterObj ) и bool QObject::eventFilter ( QObject * watched, QEvent * event ) ), а затем отслеживать сообщения QEvent::HoverEnter. |
|
|
deluxe |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.11.2011 Пользователь №: 2987 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Попытался реализовать программу через QMouseEvent, но по моему где-то сделал что-то не так.
В заголовочном файле создал новый класс, наследуемый от QMouseEvent class Mouse : public QMouseEvent { public: int begin(int x1,int y1,int l,int h); }; Исходник имеет следующий вид: #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); int x1,y1,l,h,k; x1=30; // первая координата y1=40; // вторая координата l=100; // длина h= 40; // ширина ui->pushButton->setGeometry(x1,y1,l,h); // задаю параметры кнопки (координаты) Mouse *x = new Mouse(); k=x->begin(x1,y1,l,h); if (k==0) ui->pushButton->setGeometry(130,240,100,40); // меняю положение кнопки } MainWindow::~MainWindow() { delete ui; } int Mouse::begin(int x1,int y1,int l,int h) { int x,y; x=Mouse::globalX(); // узнаю координату x y=Mouse::globalY(); // узнаю координату y if ((x<= x1+l) && (x>= x1) && (y>=y1) && (y<=y1+h)) { return 0; } else { return 1; } } Но при запуске выдаёт ошибку no matching function for call to QMouseEvent::QMouseEvent() Не могли подсказать в чём ошибка? |
|
|
vankleef |
![]()
Сообщение
#6
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 21.10.2010 Пользователь №: 2134 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
чтото типа вот так:
newForm.h
newForm.cpp
Сообщение отредактировал vankleef - 9.11.2011, 17:11 |
|
|
deluxe |
![]()
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.11.2011 Пользователь №: 2987 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() .
vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() . И сравнивал положение мыши (globalx, globaly) с положением моей кнопки. |
|
|
vankleef |
![]()
Сообщение
#8
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 21.10.2010 Пользователь №: 2134 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() . vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() . И сравнивал положение мыши (globalx, globaly) с положением моей кнопки. ну это нужно знать координаты и размеры мыши. немного велосипед получается) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 3.5.2025, 13:51 |