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

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

Страниц: [1] 2 3 ... 6   Вниз
  Печать  
Автор Тема: Ханойские башни  (Прочитано 38155 раз)
Nekron
Гость
« : Январь 12, 2010, 14:57 »

Мне необходимо сделать программу-игру "Ханойские башни" кто не знает это вроде как 3 пирамиды на одной навешаны кольца другие пустые надо с  одной перевесить все кольца на другую, но при этом нельзя ложить большие на меньшие(они расположены изначально от большего к меньшему).

Проблема в следующем, мне необходимо реализовать перемещение колец с помощью Drag&Drop, для башен я использовал линии, а вместо колец push-батоны
Вопрос: как мне сделать чтобы их можно было перетаскивать с помощью мышки?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Январь 12, 2010, 15:08 »

Пушбфтонны это конечно хорошо, но я бы взглянул на Graphics View Framework. Пирамидами будут все теже линии, а вот в качестве колец QGraphicsItem (например QGraphicsRectItem)
Записан

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

ммм тоесть в Display Widgets - Graphics View сделать их такихже размеров и заменить?
Спасиб ) а то сам думал что может лучшие варианты будут
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 12, 2010, 16:19 »

У тебя будет QGraphicsView, к нему цепляешь сцену (QGraphicsScene). На сцене отрисовываешь линии (башни) и кладешь также на сцену в нужном месте и количестве QGraphicsRectItem (кольца). Также выстави для QGraphicsRectItem флаг QGraphicsItem::ItemIsMovable:

Код
C++ (Qt)
setFlag(QGraphicsItem::ItemIsMovable, true);
Записан

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

Пасиб, разобрался ) ух жаль ток через код только можно создавать квадраты а не в дизайнере.
Записан
Nekron
Гость
« Ответ #5 : Январь 14, 2010, 17:17 »

Не пойму чтото в координатах для квадрата )
scene->addRect(QRectF(-100.0, -100.0, 50.0, 50.0));
вот последний две цифры я так понял за размер отвечают, а первые две как не изменяю ничего не меняется, и расположен всегда в центре, а мнеж надо расположить на пирамиде все квадраты, подскажите за что отвечают первые две, и как передвинуть квадрат плз )
Записан
BlackTass
Гость
« Ответ #6 : Январь 14, 2010, 17:44 »

Не пойму чтото в координатах для квадрата )
scene->addRect(QRectF(-100.0, -100.0, 50.0, 50.0));
вот последний две цифры я так понял за размер отвечают, а первые две как не изменяю ничего не меняется, и расположен всегда в центре, а мнеж надо расположить на пирамиде все квадраты, подскажите за что отвечают первые две, и как передвинуть квадрат плз )

Уверены?
Вот такой код рисует 9 квадратиков в тех местах где и должен
Код
C++ (Qt)
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QApplication>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QGraphicsView view;
   QGraphicsScene *scene = new QGraphicsScene();
   view.setScene(scene);
   scene->addRect(QRectF(-100.0, -100.0, 50.0, 50.0));    
   scene->addRect(QRectF(0.0, -100.0, 50.0, 50.0));    
   scene->addRect(QRectF(-100.0, 0.0, 50.0, 50.0));    
   scene->addRect(QRectF(0.0, 0.0, 50.0, 50.0));    
   scene->addRect(QRectF(100.0, 100.0, 50.0, 50.0));    
   scene->addRect(QRectF(0.0, 100.0, 50.0, 50.0));    
   scene->addRect(QRectF(100.0, 0.0, 50.0, 50.0));    
   scene->addRect(QRectF(-100.0, 100.0, 50.0, 50.0));    
   scene->addRect(QRectF(100.0, -100.0, 50.0, 50.0));    
   view.show();
   return a.exec();
}
 
Записан
Nekron
Гость
« Ответ #7 : Январь 14, 2010, 21:21 »

Да так складно вроде выходит ) но когда все зачеркиваю и оставляю только один из них нарисовать то рисует всеравно посередине независимо от координат. )
Ну да ладно ) главное мне действительно не один нужен.
Записан
ufna
Гость
« Ответ #8 : Январь 14, 2010, 21:24 »

прочитай про фреймворк. Это не есть "рисует".
Записан
Dendy
Гость
« Ответ #9 : Январь 14, 2010, 21:28 »

Это не он рисуется посередине, а сцена автоматически растягивается чтобы вмещать ровно все элементы. И если элемент один, то получается, что как будто посередине. Явно задавайте координаты сцены и будет вам счастье (-;
Записан
Nekron
Гость
« Ответ #10 : Январь 14, 2010, 21:31 »

А ясно ) жаль не учитывает линий что я на график вьев через дизайнер нарисовал
Записан
Nekron
Гость
« Ответ #11 : Январь 14, 2010, 21:49 »

еще подскажите, пожалуйста, вот в этой команде что ранее показывали

Код:
setFlag(QGraphicsItem::ItemIsMovable, true);

когда набираю его выводит ошибки

src\mainwindowimpl.cpp:18: error: `ItemIsMovable' is not a member of `QRectF'
src\mainwindowimpl.cpp:18: error: `setFlag' was not declared in this scope
src\mainwindowimpl.cpp:18: warning: unused variable 'setFlag'

надо какой-то инклуд добавить? или что?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



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

Код
C++ (Qt)
QGraphicsRectItem *item = new QGraphicsRectItem();
item->setFlag(QGraphicsItem::ItemIsMovable, true);
item->setRect(QRectF(-100.0, -100.0, 50.0, 50.0));
 
scene->addItem(item);
Записан

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

хмм всеравно вот такие ошибки выдает

Код:
item->setFlag(QGraphicsItem::ItemIsMovable, true);
src\mainwindowimpl.cpp:10: error: invalid use of undefined type `struct QGraphicsRectItem'
../../../QtCreator/qt/include/QtGui/../../src/gui/graphicsview/qgraphicsscene.h:70: error: forward declaration of `struct QGraphicsRectItem'

Код:
item->setFlag(QGraphicsItem::ItemIsMovable, true);
src\mainwindowimpl.cpp:11: error: invalid use of undefined type `struct QGraphicsRectItem'
../../../QtCreator/qt/include/QtGui/../../src/gui/graphicsview/qgraphicsscene.h:70: error: forward declaration of `struct QGraphicsRectItem'
src\mainwindowimpl.cpp:11: error: incomplete type `QGraphicsItem' used in nested name specifier

Код:
item->setRect(QRectF(-100.0, -100.0, 50.0, 50.0));
src\mainwindowimpl.cpp:12: error: invalid use of undefined type `struct QGraphicsRectItem'
../../../QtCreator/qt/include/QtGui/../../src/gui/graphicsview/qgraphicsscene.h:70: error: forward declaration of `struct QGraphicsRectItem'

Код:
scene->addItem(item);
src\mainwindowimpl.cpp:13: error: no matching function for call to `QGraphicsScene::addItem(QGraphicsRectItem*&)'
Записан
Dendy
Гость
« Ответ #14 : Январь 14, 2010, 22:33 »

#include <QGraphicsRectItem>
Записан
Страниц: [1] 2 3 ... 6   Вверх
  Печать  
 
Перейти в:  


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