Russian Qt Forum
Сентябрь 29, 2024, 22:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Ханойские башни  (Прочитано 38188 раз)
Nekron
Гость
« Ответ #60 : Январь 25, 2010, 15:25 »

Ясн, мож за это время и сам разберусь. Спасиб за то чем уже помог )
Записан
BlackTass
Гость
« Ответ #61 : Январь 25, 2010, 19:40 »

попробуйте заменить дропЕвент на
Код
C++ (Qt)
   bool sceneEvent (QEvent *event)
   {
       if (event->type() == QEvent::UngrabMouse)
           emit itemDropped();
       return QGraphicsRectItem::sceneEvent(event);
   }
 
Записан
Nekron
Гость
« Ответ #62 : Январь 25, 2010, 20:04 »

Заработало ) пасиб
и вот та проблема что и с таймером у меня возникла при перерисовке
Код:
connect(item[15],SIGNAL(itemDropped()),this,SLOT(Move()));

Код:
void MainWindowImpl::Move()
{
if(item[15]->collidesWithItem(line[3])){
item[15]->setRect(QRectF(-225.0+5*15, 260.0-25*n2, 190.0-10*15, 25.0));
}
if(item[15]->collidesWithItem(line[5])){
item[15]->setRect(QRectF(155.0+5*15, 260.0-25*n3, 190.0-10*15, 25.0));}
}

вот если функцию мув сделать такой то оно перерисовывает не так как еслибы только создался итем и зависит даже от того в каком месте пересечет линию
Записан
BlackTass
Гость
« Ответ #63 : Январь 25, 2010, 20:59 »

замените setRect() на setPos() и все будет ок
Записан
Nekron
Гость
« Ответ #64 : Январь 25, 2010, 21:22 »

Ура пашет ) надеюсь больше проблем не будет, осталось кроме механизма только автопрохождение сделать.

Единственное что хочу пока спросить, как сделать чтобы окно с сообщением выскакивало, типа "вы выйграли", "ошибка"?
Записан
BlackTass
Гость
« Ответ #65 : Январь 25, 2010, 21:52 »

QMessageBox::warning()
ну и посмотрите там статик методы у QMessageBox
Записан
Nekron
Гость
« Ответ #66 : Январь 25, 2010, 23:29 »

эмм а sender() это QObject, как мне написать что это ректитем на самом деле в функции?
Записан
BlackTass
Гость
« Ответ #67 : Январь 26, 2010, 00:08 »

qobject_cast<MyGraphicsRectItem *>(sender())
Записан
Nekron
Гость
« Ответ #68 : Январь 26, 2010, 00:17 »

хмм всеравно ошибки выдает после того как вначале функции
Код:
qobject_cast<MyGraphicsRectItem *>(sender())
сделал.

src\mainwindowimpl.cpp:53: error: 'class QObject' has no member named 'collidesWithItem'
src\mainwindowimpl.cpp:54: error: 'class QObject' has no member named 'setPos'

пытался так
Код:
MyGraphicsRectItem *items=qobject_cast<MyGraphicsRectItem *>(sender());

тогда ошибка далее src\mainwindowimpl.cpp:58: error: `items' cannot be used as a function
« Последнее редактирование: Январь 26, 2010, 01:09 от Nekron » Записан
BlackTass
Гость
« Ответ #69 : Январь 26, 2010, 09:12 »

где-то накосячили, так как вот такое работает и выводит позиции
Код:
void MainWindowImpl::Move()
{
    MyGraphicsRectItem *currItem = qobject_cast<MyGraphicsRectItem *>(sender());
    qDebug() << currItem->pos();
//...
}
Записан
Nekron
Гость
« Ответ #70 : Январь 26, 2010, 10:23 »

дебаг у меня тоже пашет ) а вот функции типа сетсайз и проверку на колайд делать не хочет
Записан
BlackTass
Гость
« Ответ #71 : Январь 26, 2010, 14:18 »

тогда ошибка далее src\mainwindowimpl.cpp:58: error: `items' cannot be used as a function
ну вот это явно вы что-то не так делаете. покажите эту строку.
Если отрабатывает pos(), значит тип корректно привелся к айтему, дело не в дебаге.
Записан
Nekron
Гость
« Ответ #72 : Январь 26, 2010, 16:51 »

Код:
void MainWindowImpl::Move()
{
MyGraphicsRectItem *items=qobject_cast<MyGraphicsRectItem *>(sender());
items()->setPos(-75+5*15, 350.0-25*(n1-1));

}

разобрался уже )
Код:
items->setPos(-75+5*15, 350.0-25*(n1-1));

items без скобок надо было
Записан
Nekron
Гость
« Ответ #73 : Январь 27, 2010, 19:46 »

ммм а как мне задержку попроще сделать? вроде функции flood в С++ кажется

надо чтото вроде этого?
Код:
QTimer::singleShot(1000, this, SLOT(Caption()));

ток что в слоте использовать?
« Последнее редактирование: Январь 27, 2010, 19:52 от Nekron » Записан
BlackTass
Гость
« Ответ #74 : Январь 28, 2010, 10:47 »

какую задержку? для чего именно она вам нужна?
Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 21.