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

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

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

Помогло ) спасибо.
Теперь может кто-нибудь подсказать какой командой или образом можно сделать так, чтобы при переносе мышкой кольца, когда отпускаешь оно смотрело находится-ли оно на линии башни и если да то перерисовывало по определенным координатам, а если отпускаешь и оно не на линии то возвращало в исходное(до начала перетаскивания) место.

Сами координаты думаю легко будет определить в каких случаях где перерисовывать, но каким образом сделать чтобы оно проверяло на линии оно или нет, и если да то на какой.
Записан
Nekron
Гость
« Ответ #16 : Январь 20, 2010, 19:57 »

и еще вопросик
   
Код:
QGraphicsRectItem *item[15] = new QGraphicsRectItem();
как правильно массив из 15 таких элементов обьявить? этот вариант не получился
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #17 : Январь 20, 2010, 20:55 »

QGraphicsRectItem *item[15];
for (int i = 0; i < 15; i++) {
    item = new QGraphicsRectItem();
}
Записан
Nekron
Гость
« Ответ #18 : Январь 20, 2010, 21:03 »

пасиб, сработало.
А насчет того чтобы проверять на линии или нет, не знаете команды случаем или способа?
Записан
BlackTass
Гость
« Ответ #19 : Январь 20, 2010, 21:05 »

А насчет того чтобы проверять на линии или нет, не знаете команды случаем или способа?

используй
Код:
bool QGraphicsItem::collidesWithItem ( const QGraphicsItem * other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape ) const   [virtual]
Записан
Nekron
Гость
« Ответ #20 : Январь 20, 2010, 23:01 »

а можно как-то отключить автоцентрирование сцены? а то подберу координаты для одного квадрата, начну для другого подбирать, а первый уже в совсем другом месте.
Записан
Nekron
Гость
« Ответ #21 : Январь 20, 2010, 23:05 »

а точно, говорилиже задать координаты ее точно ) помогло.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #22 : Январь 21, 2010, 00:43 »

QGraphicsRectItem *item[15];
for (int i = 0; i < 15; i++) {
    item = new QGraphicsRectItem();
}

А еще лучше:

Код
C++ (Qt)
QList<QGraphicsRectItem *>items;
 
for (int i = 0; i < 15; i++) {
   items.append(new QGraphicsRectItem());
}

И незабыть освободить потом память
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Nekron
Гость
« Ответ #23 : Январь 21, 2010, 12:43 »

Цитировать
QList<QGraphicsRectItem *>items;
 
for (int i = 0; i < 15; i++) {
    items.append(new QGraphicsRectItem());
}

хмм а какие преймущества у такого способа?
и как сделать чтобы память освобождало?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #24 : Январь 21, 2010, 13:36 »

хм, я точно помню что писал item, специально еще возвращался в начало строки... По ходу глюки...

освобождать память qDeleteAll(items);
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #25 : Январь 21, 2010, 13:37 »

хмм а какие преймущества у такого способа?

Даже с точки зрения безопасности (есть контроль выхода за пределы). Ну и конечно это Qt-way Подмигивающий

и как сделать чтобы память освобождало?

Код
C++ (Qt)
qDeleteAll(list.begin(), list.end());
list.clear();
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Nekron
Гость
« Ответ #26 : Январь 21, 2010, 16:47 »

хмм вот мой код

Код:
QGraphicsScene * scene = new QGraphicsScene;
scene->setSceneRect(QRectF(-500,-500,1000,1000));
graphicsView->setScene(scene);

QList<QGraphicsRectItem *>item;
  int i;
for (int i = 1; i < 16; i++) {
    item.append(new QGraphicsRectItem());
}

item[1]->setRect(QRectF(-410, 210.0, 160.0, 50.0));
scene->addItem(item[1]);
эта часть отдельно вроде работает, а вот когда пытаюсь сделать вот
Код:
	for (i=3;i< 16;i++)
{item[i]->setRect(QRectF(-410.0+i*5, 160.0, 160.0-10*i, 50.0));
scene->addItem(item[i]);}
то ошибки в самой программе не находит но когда запускаю само приложение выдает ошибку виндовса типа....эээ  отправлять не отправлять отчет ) и соответственно не работает, не подскажите где ошибка у меня?
Записан
Nekron
Гость
« Ответ #27 : Январь 21, 2010, 16:58 »

все нашел... хмм почемуто i<15 надо было делать, хотя создавал вроде i<16
Записан
Nekron
Гость
« Ответ #28 : Январь 21, 2010, 17:01 »

и еще проблемка
Код:
qDeleteAll(item.begin(), item.end());
item.clear();
это хорошо, но как мне сделать попроще чтобы оно не удаляло сразу, и из-за этого не отоброжалось, а после того как окно закрываю
Записан
Nekron
Гость
« Ответ #29 : Январь 21, 2010, 17:59 »

да гмм и можно подробней описать плиз это
Код:
bool QGraphicsItem::collidesWithItem ( const QGraphicsItem * other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape ) const   [virtual]
на примере, если мой квадрат item[1] соприкоснется с line_2 , как организовать с помощью этого кода, и где писать что дальше делаться будет.
Записан
Страниц: 1 [2] 3 4 ... 6   Вверх
  Печать  
 
Перейти в:  


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