crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Убегающая кнопка
deluxe
  опции профиля:
сообщение 8.11.2011, 19:27
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 8.11.2011
Пользователь №: 2987

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый вечер.
Необходимо реализовать программу, на основной форме которой будет одна кнопка и при наведении на неё кнопка будет перерисовываться в другое место.
Не могли бы подсказать как это возможно реализовать.
Я думаю для реализации программы необходимо отслеживать курсор мыши, но как это правильно сделать?
Прочитал про функцию EnterEvent, но не до конца с ней разобрался.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 8.11.2011, 21:23
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Скорей всего QMouseEvent
Переопредели в своем приложении этот ивент.
В нем сравнивай globalPos () с позицией кнопки. Ну я бы с этого начал)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
deluxe
  опции профиля:
сообщение 9.11.2011, 6:54
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 8.11.2011
Пользователь №: 2987

Спасибо сказали: 0 раз(а)




Репутация:   0  


Огромное спасибо.
Щас попытаюсь реализовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 9.11.2011, 9:07
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(deluxe @ 8.11.2011, 20:27) *
Необходимо реализовать программу, на основной форме которой будет одна кнопка и при наведении на неё кнопка будет перерисовываться в другое место.


Проще всего главной формой (на которой перемещается кнопка) фильтровать сообщения самой кнопки (см. void QObject::installEventFilter ( QObject * filterObj ) и bool QObject::eventFilter ( QObject * watched, QEvent * event ) ), а затем отслеживать сообщения QEvent::HoverEnter.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
deluxe
  опции профиля:
сообщение 9.11.2011, 16:07
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 8.11.2011
Пользователь №: 2987

Спасибо сказали: 0 раз(а)




Репутация:   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
  опции профиля:
сообщение 9.11.2011, 17:09
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 21.10.2010
Пользователь №: 2134

Спасибо сказали: 9 раз(а)




Репутация:   1  


чтото типа вот так:

newForm.h
#ifndef _NEWFORM_H
#define    _NEWFORM_H

#include "ui_newForm.h"
#include <QEvent>

class newForm : public QDialog {
    Q_OBJECT
public:
    newForm(int xarg,int yarg);
    virtual ~newForm();
private:
    Ui::newForm widget;
    int x,y;
protected:
    void enterEvent(QEvent *evt);
};


newForm.cpp
#include <basetyps.h>
#include "../newForm.h"


newForm::newForm(int xarg,int yarg) {
    
}

newForm::~newForm() {
}

void newForm::enterEvent(QEvent* evt){
    //действия при наведении
}


Сообщение отредактировал vankleef - 9.11.2011, 17:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
deluxe
  опции профиля:
сообщение 9.11.2011, 18:33
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 8.11.2011
Пользователь №: 2987

Спасибо сказали: 0 раз(а)




Репутация:   0  


vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() .

vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() .
И сравнивал положение мыши (globalx, globaly) с положением моей кнопки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vankleef
  опции профиля:
сообщение 9.11.2011, 22:22
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 21.10.2010
Пользователь №: 2134

Спасибо сказали: 9 раз(а)




Репутация:   1  


Цитата(deluxe @ 9.11.2011, 18:33) *
vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() .

vankleef, огромное спасибо. Правда сделал немного по-другому вместо EnterEvent() использовал mouseMoveEvent() .
И сравнивал положение мыши (globalx, globaly) с положением моей кнопки.


ну это нужно знать координаты и размеры мыши.
немного велосипед получается)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 13:57