Название: [РЕШЕНО] Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 15:47 Здравствуйте, форумчане! :)
Мне как любителю игры судоку, захотелось написать ее) только в разработке форм приложений я знаю самые основы: компоновщики, сплитеры, различные виджеты и т.д. А вот контролировать поведение отдельного виджета, помещенного скажем в компоновку я и не представляю. Написал небольшой пример, создающий поле судоку, в качестве ячеки взял push button: Код: const short N = 9; Кроме этого расстояние между кнопками слишком большое, и хотелось бы чтобы как в судоку это поле можно было разделить на 9 квадратов, в каждом по 9 ячеек, и чтобы было небольшое расстояние между этими квадратами. Теперь перейду к сути написания темы: Подскажите/покажите как лучше и удобнее решить эту задачу: :) (Какие виджеты лучше использовать для создания поля, какие в качестве ячеек и т.д. и т.п.) и убедительная просьба: не надо писать чтобы воспользовался поиском на сайте - уже делал ;D Название: Re: Программная разработка доски Судоку Отправлено: mutineer от Мая 30, 2012, 16:00 Кроме этого расстояние между кнопками слишком большое, и хотелось бы чтобы как в судоку это поле можно было разделить на 9 квадратов, в каждом по 9 ячеек, и чтобы было небольшое расстояние между этими квадратами. вот это попробуй http://doc.crossplatform.ru/qt/4.7.x/html-qt/qgridlayout.html#setSpacing Название: Re: Программная разработка доски Судоку Отправлено: Alatey от Мая 30, 2012, 16:15 Вот мой "рагульский" способ, зато рабоооочий ;D
Код: class Forma: public QWidget Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 17:02 Я бы посоветовал QTableView для вашей задачи.
Гораздо удобнее и сам следит за необходимыми вам ресайзами. Другой вопрос, что я судоку не интересуюсь и возможно, что недопонимаю ваше желание сделать 300 виджетов вместо 1. Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 17:16 Alatey, спасибо что напомнили о том что есть возможность переопределить событие изменения размера виджета)
Знаете, Bepec я с QTableView и с самими таблицами в qt очеень мало работал: только для отображения таблицы после отправления запроса в sql и все! И если бы вы показали код в котором QTableView помог бы в решении моей проблемы было бы очень хорошо :) Да и на наглядном примере лучше понимается :D Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 17:19 Я вот не знаю, а можно сделать так, чтобы для отдельной ячейки таблицы можно было выбрать цвет/картинки??
Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 30, 2012, 17:32 можно
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 17:36 можно kambala, а как?? :) :)Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 17:39 Просто возьми таблицу. Тот же эксцель.
Та же самая QTableView. В каждой ячейке можно хоть попа, хоть картинку, хоть цвет другой. Можно с лёгкостью (или с трудом) даже дисплей на нём сделать. И над каждой ячейкой хозяин - ТЫ :D Как - делегаты или переопределённый *::data(*) в модели. PS выложи картинку, чего ты хочешь сделать. А то я не оч соображаю твою хотелку ;) Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 17:49 (http://www.sudokuweb.ru/img/random.png)
Хочу сделать что то вроде такого =) Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 18:05 Учитывая советы которые мне дали сделал следующее:
Код: const short N = 9; только вот компоновщик не оправдал моих ожиданий: думал что размер таблицы, теперь зависит от размера виджета, и при этом ячейки будут тоже менять размер. Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 18:08 Код: for(int i = 0; i < N; i++) Ты сам им не даёшь менять размер :) А так они милые и очень послушные ;) Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 18:12 Bepec, я просто указал их начальный размер, а не фиксированный :)
и если и убрать этот цикл, то ячейки просто станут прямоугольными но при этом ничего не изменится :( Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 18:25 Виновен :D Я :) Нерассмотрел начальный.
Переопредели resizeEvent. Там и проведи нехитрый рассчёт величины ячеек. Но тут одна дилемма. Или растягивать пропорционально, либо динамически (а динамически очень некрасиво). Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 18:32 Как то уж мудренно выглядит :(
не очень хочется делать наследование, потом переопределение... жаль что в этом классе нет метода, который бы сам делал resize таблицы и ячеек :) Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 18:56 Похоже, если я захочу закрашивать или прикреплять картинку к отдельную ячейке, придется переопределять paintEvent, или делать делегат
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 19:15 Народ, а в чем тут ошибка??
Код:
при выполнение этого кода происходит ошибка, не при компиляции Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 19:18 Вы неверно судите. И по сложности, и по перекрашиванию ячейки и делегату )
Достаточно просто отдать картинку в data и он её сам отобразит как бэ. Вы думаете разработчики Qt делали этот класс для отрисовки судоку ? :) Ахз где у вас тут ошибка. Вы лучше проект скидывайте, а не огрызки :) Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 30, 2012, 19:34 да память там не выделена для элемента скорее всего. проверь элемент на равенство 0.
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 20:22 Bepec вот:
Код: QTableWidget *table = new QTableWidget; Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 30, 2012, 20:23 говорю же - память под элемент не выделена. предлагаю почитать документацию к QTableWidget.
Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 20:24 Вы сейчас пытаетесь в несуществующий первый элемент запихнуть пустую строку.
Как думаете, у вас получится? :) Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 20:30 Конечно нет ;D
Я и сам понял, что при компиляции проблем не возникло - значит дело с указателями и выделенной памяти :) только каким макаром можно получить доступ к элементу table? или создать 81 объектов QTableWidgetItem, поместить их в table? может было бы проще в качестве ячеек использовать виджет? например label или скажем создать что нибудь свое: делаем виджет с 9-ю элементами, наследуем от QWidget, эти элементы объедиены в layout? Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 30, 2012, 20:56 в двойном цикле выделить память под все элементы таблицы, потом нужным выставить значение в индивидуальном порядке
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:04 kambala, разумно :)
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:08 И все же меня беспокоит то каким сделать эту игру, что лучше - использовать table или самому, вручную сделать написать нужный для этого код? :(
Хочется выбрать тот способ, что был бы и прост и элегантен, не хотелось бы устраивать шаманские пляски :) Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 30, 2012, 21:12 через таблицу будет проще. "самому вручную" придется много рисовать через QPainter.
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:15 kambala, я последую вашему совету :)
Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 30, 2012, 21:19 Я бы рекомендовал как раз через ручную отрисовку поработать. Самое то, чтобы обучаться на практическом примере.
Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 30, 2012, 21:20 а через таблицу здесь делать.. это как зуб через попу удалять, имхо :)
P.S. - когда-то ради прикола делал "аля сокобан (http://gallery.ufna.ru/content/Old/Games/game_koloboxer.jpg)" как раз таким методом, при этом много о Qt для себя открыв Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:26 ufna, красиво выглядит :)
groupbox полно=) если не ошибаюсь и для поля игры тоже groupbox используется) точнее, поле игры внутри groupbox находится) и поле создается через переопределенный paintEvent?) Название: Re: Программная разработка доски Судоку Отправлено: Igors от Мая 30, 2012, 21:30 Никогда не слышал о такой игре. Но тоже против таблицы - она хороша когда кол-во ячеек переменно и/или непредсказуемо. А если их число жестко фиксировано (и относительно невелико) - то массив/контейнер указателей на виджеты - и вся любовь.
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:35 Igors, и размещать эти самые виджеты с помощью layout?
Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:45 Вы меня запутали ???
Дело в том что генератор карт для этой игры у меня есть - это самое сложное в этом проекте, осталось сделать интерфейс - самое простое, относительно этого генератора, и хочется выбрать самый простой работающий способ :) Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 30, 2012, 21:47 ufna, красиво выглядит :) groupbox полно=) если не ошибаюсь и для поля игры тоже groupbox используется) точнее, поле игры внутри groupbox находится) и поле создается через переопределенный paintEvent?) поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню. Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 30, 2012, 21:57 Понятно, но если делать вручную судоку то при рисовании поля проблем не возникнет, зато далее будет очень весело: нажатую ячейку нужно выделить, для этого поле разделяем в виде сетки, отлавливаем куда тыкнул пользователь, зная координаты, выясняем на какую ячейку он попал, потом можно и нужно для ячейки подобрать значение (в судоку каждая ячейка имеет значение от 1-9), значит тоже самое что и с определением ячейки по координатам. Если мы захотим изменить размер окна, тут будет проще - используя метод scale() рисовальщика, и зная ширину/высоту окна, можем это осуществить :)
Но я не сторонник самоистезаний, если есть другой путь, хотя и сам не уверен, что другой путь приведет к цели, но этот способ гарантирует полный контроль над полем и возможность сделать на нем все что придумается :) Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 30, 2012, 22:01 Ну вообще-то все выше перечисленные вещи делаются за час, а если ранее не делал - то часа может за три, зато опыта - сразу гуд :) там еще вопросы некоторые есть которые всплывут ))
а так есть еще GVC ::) но на самом деле.. см. ответ Igors. делай виджеты, накидай их на лейаут и все. Самый быстрый и грубый путь. Название: Re: Программная разработка доски Судоку Отправлено: Igors от Мая 30, 2012, 22:05 Igors, и размещать эти самые виджеты с помощью layout? А чего нет?..зато далее будет очень весело: нажатую ячейку нужно выделить, для этого .. Да, есть такие заботы, но они не так уж велики, рисовать все одном paint имеет свои преимущества. Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 30, 2012, 22:31 Блин >.<
Какие все умные. Вроде и QPainter с полной отрисовкой приплели. Да ещё и посоветовали виджетов накидать тупо(штук 200/300 получится). Вот этого я не понимаю. Чем плох TableView? По отрисовке - тот же самый QPainter. По скорости изменения (допустим перемещение ячеек и прочая) гораздо быстрее и удобнее самописного паинтера. 200-300 виджетов - а памяти у вас мало скушается? Или много? Или без разницы? Помоему View (любой) как раз подходит для этих целей. Вручную отрисовывать конечно хорошо, но... В любом случае у вас получится model-view, который будет брать данные и отрисовывать в соответствии. И тут уже вопрос гибкости встаёт. Камбала же вроде за гибкость (по теме "MoveToThread" сужу). Гибкости со своим Паинтером - никакой. Каждая правка - правка всей структуры. К тому времени уже запутанной. А придёт всё к чему? К разделению отрисовки и данных. Вот и model-view. PS Цитировать "Но тоже против таблицы - она хороша когда кол-во ячеек переменно и/или непредсказуемо. А если их число жестко фиксировано (и относительно невелико) - то массив/контейнер указателей на виджеты - и вся любовь." - Ответь Igors пожалуйста на вопрос, что лучше - 200-300 виджетов в группе, или 1 model-View? Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 30, 2012, 23:09 Камбала же вроде за гибкость (по теме "MoveToThread" сужу). я в темах про потоки вообще не пишу (или в этой писал?..). а тут я за таблицу как за доступное решение "из коробки".Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 30, 2012, 23:16 9х9 вроде как 81 виджет, откуда 200-300?
отрисовка в пеинтере имеет свои плюсы, не всегда модел/вью "встроенные" подходят. Но это уже для отдельной темы разговор. Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 06:51 2ufna - Для познавательной работы с Qt нужен и painter и model-View.
К сожалению я про судоку знаю мало. Там разве поле не может быть больше? Цитата: Википедия В последнее время появились модификации большего размера, чем 9 на 9 клеток. Например, существуют судоку с размерами 12×12 или даже 16×16, предназначенные для опытных игроков. Table гибче и манёвреннее. Можно на лету менять. И самое то на таком примере изучить Model-View. А уж потом оно точно пригодится ;) Название: Re: Программная разработка доски Судоку Отправлено: Krysk от Мая 31, 2012, 08:25 Я помню на Qt3 текстовый редактор делал каждую буковку сам отрисовывал, а также: выделение, подсветка синтаксиса и п.р... собственный QTextEdit;)
Сейчас я предпочитаю использовать qml + QGraphicsScene жаль что нокиа тормозят c qt ведь кодить на qml в 100500 раз дешевле и проще чем с хмл + java в том же андроид :( Название: Re: Программная разработка доски Судоку Отправлено: Igors от Мая 31, 2012, 08:45 Ответь Igors пожалуйста на вопрос, что лучше - 200-300 виджетов в группе, или 1 model-View? Model-view это всего лишь разделение UI и структур данных. Это можно обеспечить и с массивом виджетов и с рисованием в paint. Не вижу что выигрывается при таблице если данные статичны - наоборот, забот только больше. Хотя впрочем - дело вкуса Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 08:59 Я как то попробовал создать таблицу в 400 на 400 ячеек и групбокс 400 на 400 label. Лейблы тормозили ужасно. Таблица спокойно работала.
Model-View не только разделение ui. Там получается 1 виджет (ну пусть 3), с параметрами отображения. А 200-300 виджетов со всеми их параметрами и характеристиками и ненужными в данном случае возможностями проигрывают во всём. Скорости отображения, занимаемой памяти и прочему. Я бы сказал, что выбор у автора (если он хочет) есть между painter'ом и Model-View. И в том, и в этом случае получится model-View. В 1 случае рукописная. Во 2 случае уже готовая, "из коробки". Название: Re: Программная разработка доски Судоку Отправлено: DmitryM от Мая 31, 2012, 11:01 Понятно, но если делать вручную судоку то при рисовании поля проблем не возникнет, зато далее будет очень весело: нажатую ячейку нужно выделить, для этого поле разделяем в виде сетки, отлавливаем куда тыкнул пользователь, зная координаты, выясняем на какую ячейку он попал, потом можно и нужно для ячейки подобрать значение (в судоку каждая ячейка имеет значение от 1-9), значит тоже самое что и с определением ячейки по координатам. Если мы захотим изменить размер окна, тут будет проще - используя метод scale() рисовальщика, и зная ширину/высоту окна, можем это осуществить :) Используя mousePressEven получаешь координаты курсора, поделив координаты на размер ячейки получаешь номер ячейки, а дальше работаешь только с областью конкретной ячейки.Но я не сторонник самоистезаний, если есть другой путь, хотя и сам не уверен, что другой путь приведет к цели, но этот способ гарантирует полный контроль над полем и возможность сделать на нем все что придумается :) поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню. Рисование в paintEven не самая удобная штука, да и сам paintEven часто вызваться. Намного удобней рисовать в QImage/QPixmap, а в paintEven вызывать drawImage/drawPixmapНазвание: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 31, 2012, 11:19 Цитата: Википедия В последнее время появились модификации большего размера, чем 9 на 9 клеток. Например, существуют судоку с размерами 12×12 или даже 16×16, предназначенные для опытных игроков. ещё есть составные судоку - такие не являются квадратными, а получаются путём пересечения квадратовНазвание: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 11:56 Камбала, если это то, о чём ты говоришь - http://www.scanword.info/puzzle/gattai/tripple_doku_1.gif или http://sudoku.relaks.com.ua/on-line-sudoku/sostavnie-sudoku/sostavnie-sudoku-00002.html
Тогда это делается в модели за минуту. Только надо будет ещё логику поменять расчёта, но это в любом случае придётся делать. PS закрасить или не отрисовывать рамки ненужных квадратов - легко. Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 31, 2012, 13:29 Рисование в paintEven не самая удобная штука, да и сам paintEven часто вызваться. Намного удобней рисовать в QImage/QPixmap, а в paintEven вызывать drawImage/drawPixmap А я разве говорил что все нужно рисовать в пейнт эвенте постоянно? ;) Двойная буферизация - это необходимый минимум. Название: Re: Программная разработка доски Судоку Отправлено: kambala от Мая 31, 2012, 13:56 Камбала, если это то, о чём ты говоришь - http://www.scanword.info/puzzle/gattai/tripple_doku_1.gif или http://sudoku.relaks.com.ua/on-line-sudoku/sostavnie-sudoku/sostavnie-sudoku-00002.html да, это. я ж не говорил, что это сложно реализовать, а просто написал для общего развития :)Тогда это делается в модели за минуту. Только надо будет ещё логику поменять расчёта, но это в любом случае придётся делать. PS закрасить или не отрисовывать рамки ненужных квадратов - легко. Название: Re: Программная разработка доски Судоку Отправлено: DmitryM от Мая 31, 2012, 13:57 А я разве говорил что все нужно рисовать в пейнт эвенте постоянно? ;) поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню. Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 13:59 А вот в пейнт евенте это будет на порядок сложнее ;) Даже для общего развития :)
Название: Re: Программная разработка доски Судоку Отправлено: DmitryM от Мая 31, 2012, 14:48 А вот в пейнт евенте это будет на порядок сложнее ;) Даже для общего развития :) О_о Вызвать QPainter::drawPixmap это так сложно?Название: Re: Программная разработка доски Судоку Отправлено: Igors от Мая 31, 2012, 15:01 Цитировать Одну и ту же работу дали семерым солдатам и семерым инженерам. Семеро солдат до обеда сделали. А семеро инженеров до вечера обсуждали как лучше сделать, но работа даже не была начата По-моему время обсуждения уже многократно превысило время любой реализации :) Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 15:13 DmitryM.
Чтобы изменить с 1 квадрата на 4 соединённых, в model-View надо будет лишь изменить данные. Типа добавить в массив десяток записей. Чтобы изменить с 1 квадрата на 4 соединённых, в painter-Event нужно переписать код, потестить, изменить параметры отрисовки, собственноручно потестить(вдруг где то константа), добавить в массив десяток записей, потестить, убрать баги и вылезающие линии, добавить реализацию щелчка на пустые ячейки(где не должно быть значений) и прочая прочая. Сравнил масштаб? В model-View надо изменить данные. В Painter'e надо переписать код, добавить новые возможности. Возможно даже методы, перерасчёт значений, добавление нескольких проверок. Название: Re: Программная разработка доски Судоку Отправлено: Kurles от Мая 31, 2012, 16:06 Верх извращений - использовать model, paintEvent и QDataWidgetMapper :)
Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 31, 2012, 16:40 поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню. И дальше что? ??? я двойную буферизацию там же и делаю. Когда надо - полная перерисовка кэша (к примеру, сменился цвет или размер), когда не надо - кэшированный пиксмап + поверх те данные, которые кешировать нет смысла. И все это спокойно находится так или иначе в пеинт эвенте :) DmitryM. Чтобы изменить с 1 квадрата на 4 соединённых, в model-View надо будет лишь изменить данные. Типа добавить в массив десяток записей. Чтобы изменить с 1 квадрата на 4 соединённых, в painter-Event нужно переписать код, потестить, изменить параметры отрисовки, собственноручно потестить(вдруг где то константа), добавить в массив десяток записей, потестить, убрать баги и вылезающие линии, добавить реализацию щелчка на пустые ячейки(где не должно быть значений) и прочая прочая. Сравнил масштаб? В model-View надо изменить данные. В Painter'e надо переписать код, добавить новые возможности. Возможно даже методы, перерасчёт значений, добавление нескольких проверок. ??? 1. model-view это подход. В данном случае игра табличная, в принципе наверное через тейбл вью то она может проще и делается, а если ввести что-либо "не табличное", то сразу все пойдет прахом 2. изначально берясь за задачу ты должен изучить ее в деталях (грубо говоря - а что конкретно ты делаешь и что тебе надо). Сделать из одного квадрата четыре не так сложно и муторно, как Вы описали, если сразу подумать об архитектуре, а не наляпать по-быстрому :) Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 17:02 Правильно ufna. Если немного подумать можно и на ассемблере написать ;) А TableView из коробки ;)
Модель вью не отменяет других подходов. И в именно данной ситуации, без особо опыта с painter'ом TableView - самый лучший выбор на мой взгляд :) Название: Re: Программная разработка доски Судоку Отправлено: ufna от Мая 31, 2012, 17:30 Правильно ufna. Если немного подумать можно и на ассемблере написать ;) А TableView из коробки ;) Модель вью не отменяет других подходов. И в именно данной ситуации, без особо опыта с painter'ом TableView - самый лучший выбор на мой взгляд :) Ну не надо утрировать, все-таки мы говорим о hi-level api в любом случае ;) Пейнтер - очень классный механизм, я очень много с ним работал, особенно если говорить про мобильные платформы. В данном случае, если не нужно никаких выкрутасов с графикой, то тейбл вью - наиболее прост. А если что-то нужно сверх черненьких ячеек - лично я бы сделал "на пеинтере". Кому что ближе, наверное. Название: Re: Программная разработка доски Судоку Отправлено: gil9red от Мая 31, 2012, 18:12 Да уж, не думал что мой невинный вопрос поднимет такой кипешь :)
В общем, понятно, эту задачу можно решить разными способами, а вот какой - это дело выбора: кому как удобно :) Название: Re: Программная разработка доски Судоку Отправлено: DmitryM от Мая 31, 2012, 18:36 Сравнил масштаб? В твоем варианте не лучше. Что бы все выглядела так как показывали на картинке придется возится с настройками таблицы, настройка стилей. скорее всего придется написать делегат. написать модель, потом все это добро объединить логикой судоку. В model-View надо изменить данные. Вот тебе пример MVC (http://doc.qt.nokia.com/4.7-snapshot/itemviews-chart.html) Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 21:42 Дмитрий зачем писать делегат? Оо. Зачем со стилями возиться??? Настройки таблицы Оо... Изменить 2 числа rowCount и ColumnsCount?
Пссс... Говорят же тебе люди (я люд), для данного примера, наиболее простой и быстрый способ - tableView. А рисовать можно хоть Лейблами, сжатыми в точку - эт у кого как извращений хватит :) Название: Re: Программная разработка доски Судоку Отправлено: DmitryM от Мая 31, 2012, 22:18 Дмитрий зачем писать делегат? Оо. Зачем со стилями возиться??? Настройки таблицы Оо... Изменить 2 числа rowCount и ColumnsCount? Потому что это будет убогая прямоугольная таблица.Пссс... Говорят же тебе люди (я люд), для данного примера, наиболее простой и быстрый способ - tableView. Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Мая 31, 2012, 23:13 Дмитрий. Одна переменная и ячейка прозрачна. Десять-тридцать переменных - и у тебя получится гексаграмма, а не таблица ;)
Название: Re: Программная разработка доски Судоку Отправлено: Racheengel от Июня 04, 2012, 10:10 Сколько текста-то :) А голосовать можно? Я за QTableWidget :)
Ибо, для такого проекта главное - не только отрисовка, но и корректная реакция на действия пользователя (клики по ячейкам и т.д.), это без таблицы 81 вариант проверять тогда, что ли? :) Название: Re: Программная разработка доски Судоку Отправлено: kambala от Июня 04, 2012, 11:52 ну почему 81 - там одной формулы должно быть достаточно
Название: Re: Программная разработка доски Судоку Отправлено: Bepec от Июня 04, 2012, 13:36 Эта одна формула конечно хорошо. Но замучаешься мелочи делать. Типа - зажал пользователь клавишу, перевёл на другую ячейку. Отжал. И таких мелочей довольно много. А tableVie (даже виджет) уже лишён этих недостатков ;)
Название: Re: Программная разработка доски Судоку Отправлено: ufna от Июня 04, 2012, 19:52 Эта одна формула конечно хорошо. Но замучаешься мелочи делать. Типа - зажал пользователь клавишу, перевёл на другую ячейку. Отжал. И таких мелочей довольно много. А tableVie (даже виджет) уже лишён этих недостатков ;) Нет так страшен черт как его малюют :) Кроме грамотной буферизации (зависит от задачи конечно) все остальное - мелочи Название: Re: Программная разработка доски Судоку Отправлено: Racheengel от Июня 04, 2012, 20:54 Имхо, на таблвью сделать будет быстрее всего, и по объему кода тоже оптимально. Зачем велосипеду треугольные колеса?
|