crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> координаты мыши на собтвенном виджете
yuramuv
  опции профиля:
сообщение 12.9.2011, 4:33
Сообщение #1


Новичок


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

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




Репутация:   0  


Создал форму, на ней verticalLayout. Создал новый виджет по этой статьи Урок: QPainter для начинающих
Несколько вопросов.
1. Как узнать координаты мыши на виджете??
2. Что делает этот кусок кода? (из ссылки сверху)
QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }

3. При изменении размера формы, виджет сохраняет свой начальный размер.
Создал некую функцию
void MainWindow::change_size()
{   int _w=width();
    int _h=height();
    ui->verticalLayoutWidget->setGeometry(0,0,_w-160,_h);
}

которая вызывается когда меняются даные в doubleSpinBox. Как сделать чтоб она вызывалась при изменении размера формы?

зы.Просьба не критикировать за, возможно, ламерские вопросы, просто я не нашел ответа на них.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 12.9.2011, 11:24
Сообщение #2


Участник
**

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

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




Репутация:   11  


Цитата(yuramuv @ 12.9.2011, 5:33) *
Создал форму, на ней verticalLayout. Создал новый виджет по этой статьи Урок: QPainter для начинающих
Несколько вопросов.
1. Как узнать координаты мыши на виджете??
Если по событию мыши, то смотри QMouseEvent::pos и события мыши QWidget::mousePressEvent, QWidget::mouseReleaseEvent, QWidget::mouseDoubleClickEvent, QWidget::mouseMoveEvent.

Если в произвольном месте программы, то смотри QCursor::pos, QWidget::mapFromGlobal

Цитата(yuramuv @ 12.9.2011, 5:33) *
2. Что делает этот кусок кода? (из ссылки сверху)
QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }

По событию QEvent::LanguageChange переводит интерфейс. http://f1-delphi.ru/books/qt_4_programmiro...enie_yaz/4.html

Цитата(yuramuv @ 12.9.2011, 5:33) *
3. При изменении размера формы, виджет сохраняет свой начальный размер.
Создал некую функцию
void MainWindow::change_size()
{   int _w=width();
    int _h=height();
    ui->verticalLayoutWidget->setGeometry(0,0,_w-160,_h);
}

которая вызывается когда меняются даные в doubleSpinBox. Как сделать чтоб она вызывалась при изменении размера формы?
Переопределить QWidget::resizeEvent и дергать ее в этом методе.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
yuramuv
  опции профиля:
сообщение 13.9.2011, 1:43
Сообщение #3


Новичок


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

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




Репутация:   0  


Спасибо. Не смог разобратся с мышкой.
Кратко говоря:
//qpaintwidget.h
private:
        QMouseEvent *_mouse;
public:
        int get_x();

//qpaintwidget.cpp
int QPaintWidget::get_x()
    {
        return _mouse->x();
    }

QPaintWidget::QPaintWidget(QWidget *parent) :
    QWidget(parent)
{
    _mouse=new QMouseEvent(); //не пойму что передавать в качесте аргументов
}


void MainWindow::mousePressEvent(QMouseEvent *)
    {
        int xx,yy;
        xx=wgt->get_x();//вызываем когда по форме нажали на мишь.
        //....


Не разобрался, какие параметры нужно передавать в конструктор.
Может есть другие способы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 13.9.2011, 9:46
Сообщение #4


Участник
**

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

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




Репутация:   11  


Цитата(yuramuv @ 13.9.2011, 2:43) *
Спасибо. Не смог разобратся с мышкой.
...
Не разобрался, какие параметры нужно передавать в конструктор.
Может есть другие способы
Что-то ты накрутил сложного, все гораздо проще. Есть 2 варианта:

1. Если надо получать координаты курсора в обработчиках событий мыши. Классический пример, это показ выпадающего меню по клику. Тут все просто, методы mouseXXXEvent принимают параметр типа QMouseEvent. У него есть 2 метода pos и globalPos - локальные и глобальные координаты соответственно. Пример:
void MainWindow::mousePressEvent(QMouseEvent * event)
{
    qDebug() << "Global:" << event->globalPos();
    qDebug() << "Local:" << event->pos();
}


2. Необходимо получить координаты мыши в произвольном месте программы. Здесь нет QMouseEvent, но всегда можно воспользоваться QCursor. Пример:
void MainWindow::foo()
{
    QPoint p = QCursor::pos();

    qDebug() << "Global:" << p;
    qDebug() << "Local: " << this->mapFromGlobal(p);
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 1:49