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

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

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: Вывод графики  (Прочитано 28017 раз)
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #45 : Май 17, 2013, 10:54 »

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

Либо посоветуйте другой компонент, который для этого подойдёт - типо таблицы изображений.

Или проще с нуля рисовать всё игровое поле?
QGridLayout для сетки и QLabel для изображений как вариант
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #46 : Май 17, 2013, 12:48 »

Или проще с нуля рисовать всё игровое поле?
да
Записан
Alexu007
Гость
« Ответ #47 : Май 17, 2013, 16:05 »

А счастье было так возможно... только с таблицей чуток разобрался, и начинай сначала. Какой мучудак придумал сделать этот отступ? Ну почему нельзя было начинать рисовать с границы ячейки, а если программисту (мне) нужен этот отступ - я мог бы и сам на иконке белую полоску пририсовать... Или дать возможность менять этот отступ программно. Нафига?

В целой куче приложений можно было использовать, где используется игровое поле в клеточку. А так это почти бесполезная фича для демонстрации безграничных возможностей Qt.
Записан
Alexu007
Гость
« Ответ #48 : Май 17, 2013, 16:47 »

Или проще с нуля рисовать всё игровое поле?
да
Как это сделать практически, рисовать лучше на каком компоненте? Он должен уметь:

1. рисовать линии для сетки - эт наверное все умеют.
2. выводить рисунки в нужное место прямоугольного окна.
3. при клике на полученное изображение формировать прерывание (вызывать функцию) и передавать в неё координаты клика.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #49 : Май 17, 2013, 19:28 »

Или проще с нуля рисовать всё игровое поле?
А почему нет? Простое перекрытие paintEvent - это решение возможно всегда. Даже если оно не лучшее - другому уступит не намного. Что там рисовать? По любому самопал, готового нет. Отработка кликов - ну разоритесь на десяток-другой строчек.  Если бы вместо "поиска чудесной компоненты" (4 листа хлама) Вы бы незатейливо рисовали - все давно было бы сделано и забыто.
Записан
Alexu007
Гость
« Ответ #50 : Май 17, 2013, 20:39 »

Или проще с нуля рисовать всё игровое поле?
А почему нет? Простое перекрытие paintEvent - это решение возможно всегда. Даже если оно не лучшее - другому уступит не намного. Что там рисовать?

Понимаете, мне нужна помощь в самых простых вещах. У меня есть форма с одной кнопкой (работает), и 2 файла .h и .cpp. Как по нажатию кнопки нарисовать на форме прямую линию? Вот этого недостаточно, программа запускается но работать не хочет:

Код
C++ (Qt)
void MyWidget::MyEventHandler1()
   {
 
   QPainter p(this);
   p.setPen(Qt::green);
   p.drawLine(0, 0, 100, 100);
 
   return;
   }

чё то ей не хватает, painter неактивен или неактивирован...


Цитировать
Если бы вместо "поиска чудесной компоненты" (4 листа хлама) Вы бы незатейливо рисовали - все давно было бы сделано и забыто.

Ну какой же это хлам? Я всё-таки вымучил из корифеев, как записать в таблицу в нужную ячейку строчку, и как поместить иконку. Нужно выложить в "готовые решения" простенькую программку, демонстрирующую работу с таблицей - для таких же чайникофф, как я.
Записан
Bepec
Гость
« Ответ #51 : Май 17, 2013, 20:56 »

Понимаете, достаточно написать 5-7 программ на Qt чтобы понять принцип. Дальнейшее не сложнее чем лего.

Это для вас сложно, потому что вы хотите сразу собрать работающий и летающий звездолёт. А нужно начинать со стула.
Записан
Alexu007
Гость
« Ответ #52 : Май 17, 2013, 22:19 »

А нужно начинать со стула.

С чего нужно начинать новичку? У меня Qt Creator 2.4.1 В какой книге прочитать простейшее - как создать новый проект, правильно его сохранить, поместить мышкой на форму кнопку, Label - и по нажатию кнопки написать в Label "Hello Word"?

Я и начинаю с простейшего: как обработать нажатие кнопки, как вывести на форму строку, как нарисовать линию. А с чего мне надо начинать - с множественного наследования классов?

 
« Последнее редактирование: Май 17, 2013, 22:21 от Alexu007 » Записан
Bepec
Гость
« Ответ #53 : Май 17, 2013, 22:36 »

C линии. Читайте Бланшета или Шлее. Открывайте сразу раздел, который вас интересует. И там с нуля будет описано как сделать то или иное. С примерами кода.
Записан
Alexu007
Гость
« Ответ #54 : Май 18, 2013, 19:36 »

Ну примерно заработало:

Код
C++ (Qt)
void MyWidget::paintEvent( QPaintEvent *event )
   {
 
   #define x_pos 70
   #define y_pos 25
 
   QPainter p(this);
   QImage img("c:/temp/qwe.png");
 
   //p.setPen(Qt::red);
 
   for(int i = x_pos; i < (x_pos+275); i += 25 ) p.drawLine(y_pos, i, y_pos+250, i);
   for(int i = y_pos; i < (y_pos+275); i += 25)  p.drawLine(i, x_pos, i, x_pos+250);
 
   //p.drawImage(mouse_x, mouse_y, img);
 
   for(int i = 0; i < 10; i++)
    for(int j = 0; j < 10; j++)
       {
       if (i == j) p.drawImage((y_pos+1+i*25), (x_pos+1+j*25), img);
       }
 
   return;
   }

Но вопросы остаются:

1.  Эта функция вызывается по update(); и перерисовывает всю картинку: и сетку и наполнение сетки. В принципе мне достаточно нарисовать сетку 1 раз, но приходится каждый раз перерисовывать.

2. Не очень люблю графику, но хотелось бы хоть немного приукрасить сетку, а именно - прикрутить внешнее обрамление. Но если я в конструкторе (да и не в конструкторе) вывожу на форму картинку:

Код
C++ (Qt)
ui->label->setPixmap(QPixmap("c:/temp/qwe1.png"));

то рисовать поверх её уже не получается, картинка всегда сверху. А хотелось бы тиснуть на форму картинку, а внутрь вписать сетку. Можете что-нибудь посоветовать?
« Последнее редактирование: Май 18, 2013, 19:39 от Alexu007 » Записан
Alexu007
Гость
« Ответ #55 : Май 18, 2013, 19:43 »

Ещё вопрос: рисовать по форме можно только внутри MyWidget::paintEvent? А нельзя, например, в обработчике нажатия кнопки (или в конструкторе) нарисовать хоть прямую линию?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #56 : Май 19, 2013, 09:04 »

С чего нужно начинать новичку?
Qt очень хорош для того кто уже имеет опыт. Напр уже лет 20 ни в одной графической системе нельзя рисовать "просто так, когда хочу". Подумайте - может и не стоит спешить, Qt никуда не убежит. Резвый старт с "самого крутого" часто оборачивается тупенькой зубрежкой чужихк классов - без понимания сути/основ
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #57 : Май 19, 2013, 09:41 »

Напр уже лет 20 ни в одной графической системе нельзя рисовать "просто так, когда хочу".
Ну вообще-то, рисовать можно в любой момент и в любом месте (хоть в деструкторе), а вот визуализировать нарисованное нужно централизовано.
Записан
Bepec
Гость
« Ответ #58 : Май 19, 2013, 10:24 »

Можно рисовать на QImage/QPixmap, а перерисовывать только нужный участок с помощью update.
Записан
Alexu007
Гость
« Ответ #59 : Май 19, 2013, 10:52 »

С чего нужно начинать новичку?
Qt очень хорош для того кто уже имеет опыт. Напр уже лет 20 ни в одной графической системе нельзя рисовать "просто так, когда хочу". Подумайте - может и не стоит спешить, Qt никуда не убежит. Резвый старт с "самого крутого" часто оборачивается тупенькой зубрежкой чужихк классов - без понимания сути/основ
Тут всё зависит от предполагаемой цели. Если цель - стать профессиональным (высокооплачиваемым ессно!) программистом, то оно конечно. Для меня программирование - хобби. Что-то вроде составления кроссвордов. Пишу простенькие программки для своего удовольствия.

Нафига мне зубрить чужие классы? Мне пока хватает тех кнопочек, окошек и меню, которые идут в комплекте с Qt creator. А уж навесить на них функций я и сам смогу.
Записан
Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


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