Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
1 | |
Судоку на QML28.07.2016, 14:30. Показов 2671. Ответов 21
Метки нет (Все метки)
Появилась идея написать судоку на QML. QML я практически не знаю, да и игры даже простые ни разу не писал, поэтому у меня есть ряд вопросов. Каким образом всё это дело организовать, какие контролы использовать?
И еще. Я так понимаю фронт-энд я делаю на QML + JS, а бэк-энд на JS, т.е. без использования C++?
0
|
28.07.2016, 14:30 | |
Ответы с готовыми решениями:
21
Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах! QMl/QT при нажатии на кнопку должен окрыться другой qml файл Как подключить QML-файл в C++ по моде, а также получить ссылки на QML-элементы в C++ qml - что из себя представляет qml |
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
09.08.2016, 16:57 [ТС] | 3 |
Dmitriy_M, а как в таком случае отслеживать клик на конкретнуя ячейку? По координатам?
0
|
Заблокирован
|
|
09.08.2016, 17:05 | 4 |
Никак. Точнее можно конечно сгеморроится и вычислять координаты перемапивая их, но это вронг вей.
Создаёшь простой QML Item, в нём Repeater, который будет генерить и вставлять твои элементики - делегаты по определённому закону, ну что б в шахматном порядке. Делов то
1
|
Заблокирован
|
|
09.08.2016, 17:10 | 6 |
Можно глянуть ещё в TableView QML Type ( http://doc.qt.io/qt-5/qml-qtqu... eview.html )
Не сложно, только со своим канвасом ты потеряешь всё преимущество QML, то есть тебе надо будет вручную каждый элемент рисовать, вычислять координаты мышки, забудь про шейдеры и пр (+ канвас ваще очень глючный)
0
|
09.08.2016, 17:15 | 7 |
Какие шейдеры в судоку? Т.к. я делал японские кроссворды, то канвас не такое уж плохое решение.
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
09.08.2016, 17:23 [ТС] | 8 |
Это вы говорите без использования model/view?
Не совсем представляю, как это сделать. Например я буду использовать TableView - мне на каждый блок (3х3) надо отдельный TableView? Или на всё поле (9х9) один единственный вью?
0
|
Заблокирован
|
||||||||||||
09.08.2016, 17:47 | 9 | |||||||||||
Да не, в QML всё надо по хорошему делать через модели. Тут TabView не лучший вариант, т.е. он масштабируемый, зумируемый, скроловый и пр, да и ваще это не совсем для этого. Тебе нужен простой Item и рипитер...
В общем это же всё элементарно, я даже не поленился и решил всё сделать за тебя (с тебя флакон виски, хотя не, не надо, я ж пить два дня назад бросил, так что всё за так )
Добавил мышку, можешь шёлкать по квадратикам.
1
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
09.08.2016, 18:37 [ТС] | 10 |
Beavis2, спасибо, буду разбираться.
0
|
09.08.2016, 23:08 | 11 | |||||
Здесь модель особо не нужна:
1
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|||||||||||
10.08.2016, 11:01 [ТС] | 13 | ||||||||||
Beavis2, теперь еще больше вопросов у меня. Вот что на данный момент получилось у меня.
Также, как сделать у линий, которые я выделил на скриншоте красным, толщину больше? Так же - где реализовать логику генерации поля, проверки этого поля на правильность? Я так понимаю, всё на js можно реализовать?
0
|
Заблокирован
|
|||||||||||||||||||||||||||||||
10.08.2016, 12:41 | 14 | ||||||||||||||||||||||||||||||
Сообщение было отмечено ArmanPrestige как решение
Решение
Нужно выставить фокус у Item-а, то есть что бы ОС и Qt знала, в какое окно перенаправлять нажатие кнопки:
Но лично мне такой подход не нравится, т.к. по идее нужно задавать кучу свойств при создание элемента, что бы более - менее нормально управлять элементами, по сути нужно их все дублировать, что явно даст оверхед по геморрою. В общем я действую по другому (и судя по всему ты тоже хотел так делать), я получаю полностью элемент и делаю с ним что хочу. Делается это не через модель, а через Repeater. Вот смотри, допустим я хочу в нулевом элементе поменять текст, тогда я могу сделать так:
Теперь по поводу столбцов и колонок. В QML в штатном варианте нет специальной модели для таблицы (TableModel), есть только обычная ListView, а это ни что иное как обычный список, где у каждого элемента есть порядковый номер (индекс). Ты можешь загеморроится и сделать TableModel сам в С++, потом зарегистрировать её в QML и работать с ней так, как тебе захочется, но с учётом твоих начальных знаний в Qt, я не буду рассказывать как это делать, это сложно и долго. В твоём случае тебе просто нужно вычислить индекс элемента, исходя из кол-ва элементов в строке или же, что намного проще, пробежаться циклом по всем элементам и проверить их свойства и если они такие, какие тебе нужны - ты его нашёл. Я сделаю вторым способом, т.к. мне вычислять лень ))). В общем выдаю тебе код, где меняется текст и цвет 4-го элемента, 5-й строки твоего Чудоку.
1
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
10.08.2016, 14:45 [ТС] | 15 |
Beavis2, спасибо большое за ответ. А как можно сделать то, что я на скрине скинул? Я имею ввиду разную толщину линий. Дело в том, что каждое поле 3х3 мне надо выделить иначе всё сливается. Искал как задать разную толщину бордера для каждой стороны - не нашел.
0
|
Заблокирован
|
||||||
10.08.2016, 15:20 | 16 | |||||
А.. что то я забыл про это написать. В общем это можно сделать так же, как ты рисовал эта квадраты, через рипитер и модель, только квадраты больше бери, ставь у них толщину бордюра побольше и основной цвет - прозрачный. Но по скольку, тут в теме кто - то говорил про канвас и ты ещё не научился им пользоваться, буду тебя учить канвасу )))
Держи:
1
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
10.08.2016, 19:54 [ТС] | 17 |
Beavis2, а не скажете, как быть с размерами элементов на разных экранах? Сейчас по сути в коде жестко зашит размер элемента, но как его сделать другим в зависимости от размера экрана?
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
||||||
10.08.2016, 20:11 [ТС] | 19 | |||||
Beavis2, по размерам что я сделал - так это определение размера элемента на основании размера окна. Но это, наверное, не совсем то, что нужно, да? Еще из других вопросов - логику на чем лучше и правильнее делать? JS или C++? Насколько я вижу, тут и JS'a с головой должно хватить.
0
|
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
|
|
10.08.2016, 20:14 [ТС] | 20 |
Да, явно не то) На компе еще нормально, а вот на телефоне вот что получается.
0
|
10.08.2016, 20:14 | |
10.08.2016, 20:14 | |
Помогаю со студенческими работами здесь
20
QML вызов другого qml Переделать обычное судоку в судоку чёт-нечёт Судоку Судоку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |