Drag and drop



  • Делаю морской бой), естественно столкнулся с переносом кораблей на поле. Тупо перенос - работает. Но хотелось бы узнать, как реализовать поворот корабля при вращении колеса или нажатии на пробел, во время переноса?
    Заранее спасибо.



  • Привет!

    Смотрите. Я не до конца понял что вы хотите сделать, но как вариант можно сделать так:

    • В start'е drag'a отмечаем какой-то bool что сейчас драг
    • В end'е drag'a снимаем отметку с этого bool'а
    • В keypressevent'e на пробел проверяем этот bool
    • В wheelevent'e - аналогично

    Должно сработать).



  • Суть была в том, что есть поле. Есть панель с кораблями и вместо того, что-бы добавлять все корабли как на скриншоте:
    !http://habrastorage.org/storage2/b44/c6c/c41/b44c6cc4138ecd9b5357102d408a779c.png(seabattle)!
    Я хотел бы брать корабль и поворачивать его во время переноса в горизонтальное и вертикальное положение.

    Я сделал переменную отвечающую за ориентацию корабля. Установил ее в горизонтальное положение по-умолчанию, во время start’а drag’a. И пытался менять во время keypressevent’а. Но что-то это не очень работало. По-моему во время drag’a не работал keypressevent’а, может я и не прав.

    Могли бы вы поподробнее описать решение проблемы?
    Приемник корабля у меня класс Sea, переносимый класс Ship, а где мне делать keypressevent?
    В MainWindow'е?



  • bq. Могли бы вы поподробнее описать решение проблемы?
    Приемник корабля у меня класс Sea, переносимый класс Ship, а где мне делать keypressevent?
    В MainWindow’е?

    Нужно чтобы во время драга мы могли в keyPressEvent(..) MainWindow'а:

    Проверить является нажатая клавиша Qt::Key_Space

    Если да, проверить происходит ли сейчас драг

    Если да, поменять ориентацию Ship'a

    Это решение должно работать.



  • А как проверять происходит ли сейчас драг?



  • [quote author="kirsanov" date="1353797394"]А как проверять происходит ли сейчас драг?[/quote]

    Простите, я думал это очевидно. В начале драга ставим флажек на какую-то переменную типа bool - есть, на конце драга - нету.



  • Это действительно очевидно, но я думал что это можно сделать какими-то стандартными методами.



  • [quote author="kirsanov" date="1353797653"]Это действительно очевидно, но я думал что это можно сделать какими-то стандартными методами.[/quote]

    Скорее нет, чем да.



  • В общем кейПрессИвент во время драгМувИвента не работает почему-то. виллИвент работает но почему-то только при нажатии колеса, а не при его прокрутке.
    Не подскажете как включить обработку и вращения тоже?



  • [quote author="kirsanov" date="1353960131"]В общем кейПрессИвент во время драгМувИвента не работает почему-то. виллИвент работает но почему-то только при нажатии колеса, а не при его прокрутке.
    Не подскажете как включить обработку и вращения тоже?[/quote]

    Честно говоря, я не знаю. Все ивенты должны доставляться в любом случае. Если это не так, мне надо пойти подучить QObject. Возможно вы что-то делаете не так? Проверьте там еще раз.



  • все проверил ничего не работает.
    вот к примеру:
    @void MainWindow::wheelEvent(QWheelEvent *) {
    if (Ship::orientation == Ship::HORIZONTAL) {
    Ship::orientation = Ship::VERTICAL;
    } else {
    Ship::orientation = Ship::HORIZONTAL;
    }
    lSea->repaint();
    }@

    этот код не выполняется во время драга.
    Может вам проект выложить? Вы бы посмотрели что может быть не так, проект не так давно стартовал и кода там совсем мало.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.