Russian Qt Forum

Разное => Говорилка => Тема начата: Dkrav от Февраль 02, 2011, 15:20



Название: Рисование для чайников
Отправлено: Dkrav от Февраль 02, 2011, 15:20
Очень хочу понять как же рисовать в QT.

Никак не могу понять чего он от меня хочет. Как связать визуальные элементы на форме.

Нужна реализация очень простого примера.

Есть форма. на ней кнопочка и объект QGraphicsView. Так  вот хочу сделать так чтобы при нажатии на кнопку на  QGraphicsView появилась линия.

PS. Пришел с Делфи. Там это делается одной строчкой. Тут уже перечитал кучу документации пересмотрел кучу примеров, но концепции так и не понял.

PPS: Можете обзывать кем угодно - но после того как покажете готовый проект  ;) 


Название: Re: Рисование для чайников
Отправлено: _govorilka от Февраль 02, 2011, 15:48
Возьми вот эту книжку:
http://hzsystem.googlecode.com/files/qt45x.djvu (http://hzsystem.googlecode.com/files/qt45x.djvu)

Думаю тебе поможет.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 02, 2011, 18:01
Спасибо за книжку. Занятная. Но это всё я уже читал. В книге все примеры построены на создании элементов непосредственно в тексте программы. Меня же интересует использование UI файла созданного в QT Creator'е.


Название: Re: Рисование для чайников
Отправлено: _govorilka от Февраль 02, 2011, 18:46
Спасибо за книжку. Занятная. Но это всё я уже читал. В книге все примеры построены на создании элементов непосредственно в тексте программы. Меня же интересует использование UI файла созданного в QT Creator'е.

Там в 45 главе описано создание прототипов.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 02, 2011, 18:56
Всю естественно не прочитал. Ибо не электроник  ::)

И в готовых примерах которые идут с QT всё построение тоже ориентировано на работу в тексте программы.  :(

Да и что имеется в виду под "хорошо выучить С++"?
Моих знаний достаточно для реализации задуманных алгоритмов. Проблемы именно с GUI.   


Название: Re: Рисование для чайников
Отправлено: panAlexey от Февраль 02, 2011, 19:09
Проблемы именно с GUI.    
Лентяй .


Название: Re: Рисование для чайников
Отправлено: _govorilka от Февраль 02, 2011, 19:33
Тот что в книге описано про Qt Designer, полностью сопдает с тем. что есть есть сейчас в Qt Creator. Просто ассистент и дизайнера стали частью Qt Creator и как отдельные проекты практически не развиваются.

Файлы *.ui - это xml описывающий какие графические элементы нужно создавать и с какими параметрами. Файлы можно править в блокноте (некоторые возможности uic из Designer'а не доступны). На основе этих файлов UIC генерирует *.h файл, который затем подключается к проекту и компилируется вместе с ним. Его содержимое можно посмотреть в папке с obj файлами.

В генериуемом хедере объявляется класс Ui::*..., все контроли, которые ты накидаешь в дизайнере будет членами этого класса. В классе, форму которого ты правишь, добавлениется переменная с именем ui (можно переименовать на любую другую).

В этом примере есть использование Ui: examples/widgets/stylesheet. Также есть использование страниц стилей.

Механизм UI очень похож на Delphi 7, только там создержимое DFM отправлется в ресурсы exe файла, а его обработка происходит при каждом вызове программы.


Название: Re: Рисование для чайников
Отправлено: lit-uriy от Февраль 02, 2011, 20:26
Очень хочу понять как же рисовать в QT.
Так  вот хочу сделать так чтобы при нажатии на кнопку на  QGraphicsView появилась линия.
Меня же интересует использование UI файла созданного в QT Creator'е.
 
Графический объект (линию) нельзя нарисовать в дизайнере. Да и в Дельфи тоже (в нём надо было программно на канве рисовать)

Здесь концепт другой, рисуешь на сцене (QGraphicsScene), а представление (QGraphicsView) представляет часть сцены или её всю.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 02, 2011, 23:46
Проблемы именно с GUI.    
Лентяй .

Может я и лентяй, но для меня дикость тратить много времени на формочки, кнопочки и их взаимодействие. Это дело программной оболочки. Заказывают не кнопочки, а функционал. Потому то мне и не охота сначала намаятся, а потом понять что всё делал "через задницу" (извините мой французский  ::) )


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 02, 2011, 23:51
Очень хочу понять как же рисовать в QT.
Так  вот хочу сделать так чтобы при нажатии на кнопку на  QGraphicsView появилась линия.
Меня же интересует использование UI файла созданного в QT Creator'е.
 
Графический объект (линию) нельзя нарисовать в дизайнере. Да и в Дельфи тоже (в нём надо было программно на канве рисовать)

Здесь концепт другой, рисуешь на сцене (QGraphicsScene), а представление (QGraphicsView) представляет часть сцены или её всю.

Да в Дельфе рисовалось и рисуется на канве. И подход очень простой :)
Вот в том то и вопрос как привязать QGraphicsScene к QGraphicsView уже описанному на форме.


Название: Re: Рисование для чайников
Отправлено: ieroglif от Февраль 03, 2011, 05:17
http://www.prog.org.ru/topic_13567_0.html

з.ы. всё равно лентяй  :P


Название: Re: Рисование для чайников
Отправлено: lit-uriy от Февраль 03, 2011, 07:58
>>Вот в том то и вопрос как привязать QGraphicsScene к QGraphicsView уже описанному на форме.
Читай тут (http://doc.crossplatform.ru/qt/4.6.x/graphicsview.html)


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 03, 2011, 12:53
Как я посмотрю тут все знают как оно теоретически должно работать, но практически не применяет.

Вот что я успел для себя накопать и реализовать  ;) помоему это самый простой вариант из всего что я видел
Код:
void MainWindow::on_pushButton_clicked()
{
    QRect    rect(ui->plbl->contentsRect());

    QImage sourceImage(rect.size(), QImage::Format_ARGB32_Premultiplied);
    QPainter painter;
    painter.begin(&sourceImage);
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setPen(QPen(QColor(0, 255, 0)));
        painter.drawLine(0,0,100,100);
    painter.end();

    ui->plbl->setPixmap(QPixmap::fromImage(sourceImage));
}



Название: Re: Рисование для чайников
Отправлено: Igors от Февраль 03, 2011, 15:53
Забомбили теорией  :) Попробую своими словами и попроще
Так  вот хочу сделать так чтобы при нажатии на кнопку на  QGraphicsView появилась линия.
Рисование может вызываться в любой момент и никак не связано с нажатием кнопки. Поэтому QGraphicsView должен каким-то образом знать рисовать ему линию или нет. Простейший способ - завести в нем член класса данные/флажок. Если установлен - значит рисовать линию. При нажатии кнопки этот флажок взводится (обычно через сигнал). При нажатии др. кнопки может (например) сбрасываться. Ну не забыть repaint чтобы обновить изображение. Вот и все.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 03, 2011, 16:08
Как-то через чур за мудро :) Нанять художника и человека который бы его будил  :D

В любом случае всем спасибо :) Если кто-то может предложить более простой способ, чем тот что я уже реализовал - милости просим :) ато рисовать на Лабелах это для меня как-то совсем прикольно  ;D


Название: Re: Рисование для чайников
Отправлено: panAlexey от Февраль 03, 2011, 22:53
Проблемы именно с GUI.    
Лентяй .
Может я и лентяй, но для меня дикость тратить много времени на формочки, кнопочки и их взаимодействие. Это дело программной оболочки. Заказывают не кнопочки, а функционал. Потому то мне и не охота сначала намаятся, а потом понять что всё делал "через задницу".
И наши отцы и деды мерзли и под пули ходили, что-бы вот такой вот соплезвон тут на форуме нюни распускал по такому пустяку.
слюнтяй.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 04, 2011, 11:49
А еще наши прапра.....прадеды в шкурах ходили и палками огонь добывали  ;D
--------------> Лес там - раз по делу сказать нечего  :P


Название: Re: Рисование для чайников
Отправлено: developer от Февраль 04, 2011, 12:13
 ;D ;D ;D ;D


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 04, 2011, 13:00
а за что в говорилку сбросили?  :)


Название: Re: Рисование для чайников
Отправлено: Пантер от Февраль 04, 2011, 13:03
А не нужно было? Я так не думаю.


Название: Re: Рисование для чайников
Отправлено: panAlexey от Февраль 04, 2011, 13:38
Я недавно деда похоронил, он всю войну прошел.
Все это время жил с осколком в ноге и ни одной жалобы не слышали от него.
А тут блин вылезло дитя кока-колы с мега проблемой...
Как минимум стыдно должно быть.


Название: Re: Рисование для чайников
Отправлено: Пантер от Февраль 04, 2011, 13:40
panAlexey, соболезную, у самого деду на прошлой неделе 40 дней было. Но не стоит обозляться и изливать это на форуме.
Ветку потом потру. А можно и вообще её рубануть, не несет она ничего полезного.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 04, 2011, 14:05
Потереть надо.
Вопрос был задан абсолютно конкретный. А свои точки зрения на жизнь оставляйте при себе.
И давать оценку человеку, которого в глаза не видел только потому, что он что-то делает не так как ты - совсем не красиво.

Да я не хвастаюсь тем сколько тысяч строк кода в моей программе. И сколько % из этих строк реально что-то делают. А не просто писать ради писания.


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 04, 2011, 18:01
А для тех кто говорил, что без игры с классами сделать ничего нельзя и надо строго действовать по книжкам - вот :)
Код:
void MainWindow::on_Graph_clicked()
{
    Scene.addLine(rand()%100,rand()%100,rand()%100,rand()%100);
}



Название: Re: Рисование для чайников
Отправлено: Igors от Февраль 04, 2011, 19:59
А для тех кто говорил, что без игры с классами сделать ничего нельзя и надо строго действовать по книжкам - вот :)
Код:
void MainWindow::on_Graph_clicked()
{
    Scene.addLine(rand()%100,rand()%100,rand()%100,rand()%100);
}

Завидую Вашей молодости и непосредственности  :)


Название: Re: Рисование для чайников
Отправлено: Dkrav от Февраль 05, 2011, 14:34

Завидую Вашей молодости и непосредственности  :)

А кто сказал что я молодой?  ;D


Название: Re: Рисование для чайников
Отправлено: ieroglif от Март 11, 2011, 03:05

Завидую Вашей молодости и непосредственности  :)

А кто сказал что я молодой?  ;D

"блондинко" - это состояние В голове, а не НА ней  :P
з.ы. раз уж в говорилку сбросили =)


Название: Re: Рисование для чайников
Отправлено: qwerty_ от Сентябрь 12, 2011, 17:18
Код:
void MainWindow::on_pushButton_clicked(){
  QGraphicScene *gs = new QGraphicScene;
  ui->graphicsView->setScene(gs);
  gs->addLine(1,2,3,5);
}