crossplatform.ru

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

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Перемещение QFrame
ufna
  опции профиля:
сообщение 24.7.2009, 17:56
Сообщение #21


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

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




Репутация:   5  


а если добавить к X просто некоторую константу?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 24.7.2009, 17:59
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(ufna @ 24.7.2009, 18:56) *
а если добавить к X просто некоторую константу?

Надо еще в функцию и нажатия внести. Этого еще не сделал. Сейчас все отрихтую, может быть, вообще больше ничего не понадобится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 27.7.2009, 10:14
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Сделал вариант, который "почти" правильный! :)

/// Переопределение нажатия на лекую кнопку мыши
void VFFrame::mousePressEvent(QMouseEvent* events)
{
    QFrame::mousePressEvent(events);

    switch(events -> button())
    {
    case Qt::LeftButton:                ///< если нажата левая кнопка мыши
        _is_left_pressed = true;
    break;
    }

    if(!_is_left_pressed) return;

    QPoint gpos(events -> globalPos());
    QPoint pos((_graph) ? _graph -> mapFromGlobal(gpos) : ((_mgraph) ? _mgraph -> mapFromGlobal(gpos) : gpos));
    if(_vf_shape == QFrame::VLine)
        pos.setX(pos.x() - _DELTA_COORD),
        setGeometry(pos.x(), y(), width(), height());
    else if(_vf_shape == QFrame::HLine)
        pos.setY(pos.y() - _DELTA_COORD),
        setGeometry(x(), pos.y(), width(), height());
}

/// Передвижение визира вслед за мышью
void VFFrame::mouseMoveEvent(QMouseEvent* events)
{
    QFrame::mouseMoveEvent(events);
    if(!_is_left_pressed) return;

    QPoint gpos(events -> globalPos());
    QPoint pos((_graph) ? _graph -> mapFromGlobal(gpos) : ((_mgraph) ? _mgraph -> mapFromGlobal(gpos) : gpos));
    if(_vf_shape == QFrame::VLine)
        pos.setX(pos.x() - _DELTA_COORD),
        setGeometry(pos.x(), y(), width(), height());
    else if(_vf_shape == QFrame::HLine)
        pos.setY(pos.y() - _DELTA_COORD),
        setGeometry(x(), pos.y(), width(), height());
}

/// Отпускание кнопки мыши
void VFFrame::mouseReleaseEvent(QMouseEvent* events)
{
    QFrame::mouseReleaseEvent(events);
    if(!_is_left_pressed) return;

    _is_left_pressed = false;
    QPoint gpos(events -> globalPos());
    QPoint pos((_graph) ? _graph -> mapFromGlobal(gpos) : ((_mgraph) ? _mgraph -> mapFromGlobal(gpos) : gpos));
    if(_vf_shape == QFrame::VLine)
        pos.setX(pos.x() - _DELTA_COORD),
        setGeometry(pos.x(), y(), width(), height());
    else if(_vf_shape == QFrame::HLine)
        pos.setY(pos.y() - _DELTA_COORD),
        setGeometry(x(), pos.y(), width(), height());
    _is_viewfinder = false;
}


Это "почти" состоит в том, что я из координаты вычитаю константу. У меня она равна 20. А есть возможность сделать без таких хаков? Заранее благодарен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.7.2009, 10:17
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(AD @ 27.7.2009, 11:14) *
Это "почти" состоит в том, что я из координаты вычитаю константу. У меня она равна 20. А есть возможность сделать без таких хаков? Заранее благодарен.

Попробуй вычитать для:
* VLine - width() / 2
* HLine - height() / 2
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 27.7.2009, 10:32
Сообщение #25


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(BRE @ 27.7.2009, 11:17) *
Попробуй вычитать для:
* VLine - width() / 2
* HLine - height() / 2

Спасибо. В следующем варианте помогло полностью:
* VLine - width()
* HLine - height()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.12.2024, 17:01