С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
1

Где почитать основы, принципы, идеалогию Qt? Интересует рисование

24.10.2012, 18:49. Показов 1503. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Читаю Шлее М. - Qt4.5. Профессиональное программирование на C++. Эта книжка больше справочник, чем книжка. Но стоит у меня последняя 4.8.1 версия.

Я вот что не могу понять. Как рисовать?
Не будем сейчас о OpenGL. В Qt обычная графика рисуется только через объект QPainter?
Объект QPainter требует для рисования указатель на класс, унаследованный от QPaintDevice. Больше ничего?
Вот написал программу, но ничего не выводится в виджет:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <QtGui/QApplication>
#include <QPainter>
#include <QBrush>
#include <QColor>
#include <QRact>
#include <QWidget>
 
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QWidget w;
  w.resize(500, 500);
  QPainter painter(&w);
  painter.setRenderHint(QPainter::Antialiasing, true);
  painter.setPen(QPen(Qt::blue, 3, Qt::DashLine));
  painter.drawRect(QRect(10, 10, 110, 70));
  w.show();
  return a.exec();
}
}
А как определяется куда выводится графика? Я полагаю в ту область, на которую указывает указатель на класс(который наследует от QPaintDevice), который мы передаем в QPainter в конструктор или его метод begin. Так? В выше написанной программе это будет QWidget. Так?

Вот я хочу создать окно, в котором будет всякие кнопки. Мне надо еще в отдельную часть этого окна выводить графику. Как это сделать? Какие классы использовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2012, 18:49
Ответы с готовыми решениями:

Где почитать про основы Windows forms (С++)
Здравствуйте! Программированием занимаюсь давно, но с Windows forms не сталкивался. А вот сейчас...

Где можно доступно и связно почитать о сетевых сокетах? Интересует работа функций get_sock_name и описание
структур вроде sock_len_t или sock_addr. В документации все разбросано и с английским у меня...

Где можно почитать основы разработки в Unity/Unity 3D
До этого был небольшой опыт работы с Windows.Forms и WFP с C#. Где можно разобраться и научится...

Основы работы с сетью: что почитать
Доброго времени суток, форумчане! Хотел задать такой вопрос: что можно почитать по этой тематике...

14
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.10.2012, 21:57 2

Не по теме:

Цитата Сообщение от Chelioss Посмотреть сообщение
А как определяется куда выводится графика? Я полагаю в ту область, на которую указывает указатель на класс(который наследует от QPaintDevice), который мы передаем в QPainter в конструктор или его метод begin. Так? В выше написанной программе это будет QWidget. Так?
вам бы изучить принцип работы вашей ОС(а точнее её Апи) и тогда бы таких вопросов невозникло



Цитата Сообщение от Chelioss Посмотреть сообщение
Вот я хочу создать окно, в котором будет всякие кнопки. Мне надо еще в отдельную часть этого окна выводить графику. Как это сделать? Какие классы использовать?
помещаешь виджет на виджет и рисуешь

Добавлено через 1 минуту
Цитата Сообщение от Chelioss Посмотреть сообщение
В Qt обычная графика рисуется только через объект QPainter?
нет, есть и более высокоуровневые штуки типа Qt Graphics Framework
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
24.10.2012, 23:05  [ТС] 3
Цитата Сообщение от Jupiter Посмотреть сообщение
вам бы изучить принцип работы вашей ОС(а точнее её Апи) и тогда бы таких вопросов невозникло
У меня Win7. Вы имеете ввиду Win32 API? Как это мне поможет? В Qt никаких упоминаний о Win32 API нет.
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
25.10.2012, 09:36 4
а где вы в win7 WIN32 API нашли то? ну просто интересно, мне так сказать для общего развития
на сколько я знаю, microsoft отказалась от этой технологии и держит её исключительно для обратной совместимости, а так, сейчас все на .NET-е крутится... WPF там всякие и т.д.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.10.2012, 10:46 5
1. Для рисование внутри QWidget, есть
C++ (Qt)
1
void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected]
который вызывается каждый раз, когда надо перерисовать виджет
2. Смотри еще на
C++ (Qt)
1
2
bool QPainter::begin ( QPaintDevice * device )
bool QPainter::end ()
Т.к. из-за
C++ (Qt)
1
 return a.exec();
нет завершения рисования.
0
Jupiter
25.10.2012, 16:53
  #6

Не по теме:

Цитата Сообщение от Chelioss Посмотреть сообщение
Вы имеете ввиду Win32 API? Как это мне поможет? В Qt никаких упоминаний о Win32 API нет.
Цитата Сообщение от l_a_m Посмотреть сообщение
а где вы в win7 WIN32 API нашли то? ну просто интересно, мне так сказать для общего развития
на сколько я знаю, microsoft отказалась от этой технологии и держит её исключительно для обратной совместимости, а так, сейчас все на .NET-е крутится... WPF там всякие и т.д.
Qt, WinForms, MFC, VLC - это все обертки над WinAPI

0
Maxim Prishchepa
25.10.2012, 16:55
  #7

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
Qt, WinForms, MFC, VLC - это все обертки над WinAPI
холиваром попахивает :-)
На сколько я знаю, начиная с Win Vista мелкософт отказался от дальнейшего развития WinAPI и перешел на .NET (носом ткнуть не могу, гуглить лень и могу быть совершенно не прав) :-)

0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.10.2012, 16:55 8
Цитата Сообщение от Jupiter Посмотреть сообщение
Qt, WinForms, MFC, VLC - это все обертки над WinAPI
Qt не использует WinAPI, для рисования.
0
Jupiter
25.10.2012, 16:57
  #9

Не по теме:

Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Qt не использует WinAPI, для рисования.
очень даже может быть, но это не делает Qt независимым от апишных функций создания окна, контекста и прочего

0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.10.2012, 16:59 10
Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:


очень даже может быть, но это не делает Qt независимым от апишных функций создания окна, контекста и прочего

Не по теме:


А где то есть стандарт на GUI, что бы можно было использовать одно и тоже API на всех системах?

0
Maxim Prishchepa
25.10.2012, 17:00
  #11

Не по теме:

Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Qt не использует WinAPI, для рисования.
спорный вопрос, да, Qt умеет рисовать с помощью OpenGL, но мне кажется вряд ли, что рисуя painter-ом на виджите Qt неявно использует OpenGL. По крайней мере, если его явно об этом не попросить.

0
Dmitriy_M
25.10.2012, 17:19
  #12

Не по теме:

Цитата Сообщение от l_a_m Посмотреть сообщение
спорный вопрос, да, Qt умеет рисовать с помощью OpenGL, но мне кажется вряд ли, что рисуя painter-ом на виджите Qt неявно использует OpenGL. По крайней мере, если его явно об этом не попросить.
Из-за
Since Qt 4.0, QWidget automatically double-buffers its painting, so there is no need to write double-buffering code in paintEvent() to avoid flicker.
Поэтому думается, что рисует где-нибудь в Pixmap

0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
25.10.2012, 17:21 13
Цитата Сообщение от l_a_m Посмотреть сообщение
Qt умеет рисовать с помощью OpenGL, но мне кажется вряд ли, что рисуя painter-ом на виджите Qt неявно использует OpenGL. По крайней мере, если его явно об этом не попросить.
Qt умеет несколько бэкэндов для рисования, в том числе собственный напроцессорный(который raster), но по умолчанию пользуется системной рисовалкой(winapi/x11(xrender)/etc).
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
25.10.2012, 21:55  [ТС] 14
Цитата Сообщение от l_a_m Посмотреть сообщение
а где вы в win7 WIN32 API нашли то? ну просто интересно, мне так сказать для общего развития
на сколько я знаю, microsoft отказалась от этой технологии и держит её исключительно для обратной совместимости, а так, сейчас все на .NET-е крутится... WPF там всякие и т.д.
MS Visual Studio>Проекты>Win32

Добавлено через 2 часа 10 минут
Все, разобрался как рисовать.
код
C++ (Qt)
1
2
3
4
5
6
7
8
9
void MainWindow::paintEvent(QPaintEvent *pe)
{
    QPainter painter;
 
    painter.begin(this);
    painter.fillRect(QRect(20, 20, 50, 50), Qt::red);
    //painter.drawRect(10, 10, 20, 20);
    painter.end();
}


Меня вот что интересует. Если мне надо, чтобы графика перерисовывалась постоянно как в играх, то где мне надо рисовать? Переопределение события paintEvent в виджете в данном случае не подходит, хотя если через таймер как-нибудь реализовать, но мне кажется это не то.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.10.2012, 22:06 15
Цитата Сообщение от Chelioss Посмотреть сообщение
Меня вот что интересует. Если мне надо, чтобы графика перерисовывалась постоянно как в играх, то где мне надо рисовать? Переопределение события paintEvent в виджете в данном случае не подходит, хотя если через таймер как-нибудь реализовать, но мне кажется это не то.
происходит событие (пользователь нажал кнопку или timer tick не принципиально) - соответвенно изменили координаты объекта и вызвали перерисовку - paintEvent перерисовал сцену с новыми координатами объекта
0
25.10.2012, 22:06
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2012, 22:06
Помогаю со студенческими работами здесь

Что можно почитать, если уже знаешь основы?
Что можно почитать,если уже знаешь основы? С основами,как я вижу,ничего толкового сделать нельзя.

В какой книге почитать про основы ООП новичку?
Или про это не надо читать? Просто один раз услышать и хватит.

Где почитать
Где почитать полностью про построение регулярных выражений . У меня есть XML но нужно его...

Где почитать о JSlider
Когдато видел очень хорошую статью с подробным описанием и картинками по ВСЕМ возможностям JSlider....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru