Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
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();
}@этот код не выполняется во время драга.
Может вам проект выложить? Вы бы посмотрели что может быть не так, проект не так давно стартовал и кода там совсем мало.