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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование в Qt  (Прочитано 21198 раз)
Николай
Гость
« : Декабрь 21, 2004, 08:59 »

Недавно начал осваивать Qt. У меня версия Qt-win-commercial-3.3.3.
Не получается простейшая программа. Хочу нарисовать что-нибудь, но не прямо на форме, а используя WidgetStack. Итак, создаю пустой Main Window, ложу на форму WidgetStack, ложу на нее iconView, пишу код:

void Form1::paintEvent( QPaintEvent * )
{
 
   QPainter p;
   p.begin( this );  
   p.setPen( Qt::blue );
   QBrush b1( Qt::blue );
    p.setBrush( b1 );
    p.drawRect( 10, 10, 200, 100 );
 p.end();  
}

Прога компилируется без ошибок, но почему-то при запуске получаю пустое окно.
Помогите разобраться.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Декабрь 22, 2004, 10:42 »

попробуй убить p.begin( this ); и p.end(); Улыбающийся
это во первых. во - вторых, функцию точно виртуальной объявил? Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Николай
Гость
« Ответ #2 : Декабрь 22, 2004, 14:01 »

Попробовал убрать
       p.begin( this );
       p.end();

Все равно то же самое. Текст программы скопирован один к одному с *ui.h
Записан
xcs
Гость
« Ответ #3 : Декабрь 24, 2004, 16:37 »

Например, убери свой paintEvent, дай виджету setPaletteBackgroundColor(red), посмотри..
Записан
pilot.net
Гость
« Ответ #4 : Декабрь 27, 2004, 12:54 »

Цитата: "Николай"

Прога компилируется без ошибок, но почему-то при запуске получаю пустое окно.
Помогите разобраться.

Странно у меня все работает именно как ты делал !?
Записан
pilot.net
Гость
« Ответ #5 : Декабрь 27, 2004, 13:01 »

Цитата: "Racheengel"
попробуй убить p.begin( this ); и p.end(); Улыбающийся
это во первых. во - вторых, функцию точно виртуальной объявил? Улыбающийся

Это бред что первое  - вообще рисовать не будет
что второе  - виртуальной функцию определить один раз в родительском классе и везде она будет виртуальной
Записан
Николай
Гость
« Ответ #6 : Декабрь 27, 2004, 15:07 »

Странно у меня все работает именно как ты делал !?[/quote]

Работает как? Т.е рисунок выводится на iconView или как у меня - пустой? Кстати, если координаты левого верхнего угла прямоугольника установить (0,0), то краешек фигуры виден на главной форме. Никак не могу "сообщить" Qt, чтобы он рисовал на iconView.
Записан
Anonymous
Гость
« Ответ #7 : Декабрь 27, 2004, 15:19 »

Цитата: "Николай"
Странно у меня все работает именно как ты делал !?


Работает как? Т.е рисунок выводится на iconView или как у меня - пустой? Кстати, если координаты левого верхнего угла прямоугольника установить (0,0), то краешек фигуры виден на главной форме. Никак не могу "сообщить" Qt, чтобы он рисовал на iconView.[/quote]
тебе надо переопределить не
void Form1::paintEvent( QPaintEvent * )
а void QIconView::paintEvent( QPaintEvent * )
Записан
pilot.net
Гость
« Ответ #8 : Декабрь 27, 2004, 15:21 »

Цитата: "Anonymous"
Цитата: "Николай"
Странно у меня все работает именно как ты делал !?


Работает как? Т.е рисунок выводится на iconView или как у меня - пустой? Кстати, если координаты левого верхнего угла прямоугольника установить (0,0), то краешек фигуры виден на главной форме. Никак не могу "сообщить" Qt, чтобы он рисовал на iconView.

тебе надо переопределить не
void Form1::paintEvent( QPaintEvent * )
а void QIconView::paintEvent( QPaintEvent * )[/quote]
это я ответил
Записан
Николай
Гость
« Ответ #9 : Декабрь 28, 2004, 08:48 »

Выдает error C2509: 'paintEvent': member function not declared in 'QIconView'
Записан
pilot.net
Гость
« Ответ #10 : Декабрь 28, 2004, 09:12 »

Цитата: "Николай"
Выдает error C2509: 'paintEvent': member function not declared in 'QIconView'

Ты объясни что тебе надо
вот для рисование фона есть функция  virtual void QIconView::drawBackground ( QPainter * p, const QRect & r )
Записан
Николай
Гость
« Ответ #11 : Декабрь 28, 2004, 09:24 »

Надо написать программу, в которой пользователь в главном окне вводил бы данные, а результаты в виде графика выводились бы в новом окне. Поскольку графиков может быть несколько, необходимо, чтобы пользователь листал страницы. Мне казалось, что для этого QWidgetStack наиболее подходящий.
Записан
pilot.net
Гость
« Ответ #12 : Декабрь 28, 2004, 09:46 »

Рочему тебе не использовать QTabBar а туда вставлять QWidget и на нем рисовать ?
или еще лучше QCanvas
посмотри http://qwt.sourceforge.net/ там есть готовые графики
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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