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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QCanvas и QCanvasView  (Прочитано 4869 раз)
faust
Гость
« : Март 01, 2006, 03:12 »

Qt v.3.1.1

компонент типа QCanvasView содержит в себе канву QCanvas:

void NSwgt::create_canvas(){
   //---create canvas
1)    p_canv = new QCanvas();
2)    p_canv->resize(200,100);
3)    p_canv->setBackgroundColor(Qt::green);

    //---create canvas viewing
4)    p_canvv = new QCanvasView(p_canv,p_wgt_draw);
5)//  p_canvv->resizeContents(200,100);
6)//  p_canvv->setResizePolicy(QScrollView::Manual);

7)    p_canvv->setPaletteBackgroundColor(Qt::red);
8)    p_canvv->setPaletteForegroundColor(Qt::blue);

   //---add canvasview to draw layout
9)    p_hblay_draw->addWidget(p_canvv);

10)    printf("Canvas:\n[%d,%d]\n",p_canv->width(),p_canv->height());
}


строки 1-3:
создается канва с указателем p_canv, меняется ее размер и цвет
строки 4,7,8:
создается контейнер p_canvv для созданной канвы p_canv, изменяются его цвета

контейнер в развернутом виде намного больше самой канвы, но цвет канвы (зеленый) "выливается" за ее пределы, заливая всю область контейнера, т.е., нигде не будет видно синего цвета. Мне же нужно для области канвы оставить ее цвет, а остальное закрасить в какой-нить другой

было подозрение, что канва просто растягивается на всю область контейнера, игнорируя установленные размеры 200х100, но printf показал обратное, да и в контейнере все зеленое кроме тонкой черной рамки канвы. Поэтому и не понадобились строки 5 и 6, в которых устанавливается размер содержимого контейнера (т.е., размер канвы)

выходит, что контейнер зачем-то закрашивает себя  всего  цветом канвы. Как с этим бороться?

на
http://ftp://public.ntu-kpi.kiev.ua/incoming/canvas/canvasview_colors_trouble.png
можно увидеть эту картину

зы.
05:38:54 []illiada@ghost:210>./05
Canvas:
[200,100]

ззы. метод p_canvv->setEraseColor(Qt::blue) ничего не изменил, но рамка канвы
почему-то стала не черной, а белой
Записан
Dendy
Гость
« Ответ #1 : Март 01, 2006, 10:44 »

Дело в том, что setBackgroundColor - ето метод не QCanvasView, а QWidget. Соответственно, закрашивание происходит методами виджета - на всю форму, не зависимо от КанвьІ (про которую виджет ни слухом ни духом). Нужно использовать метод самой КанвьІ QCanvas::setBackgroundColor().
Записан
faust
Гость
« Ответ #2 : Март 01, 2006, 13:26 »

Цитировать
Дело в том, что setBackgroundColor - ето метод не QCanvasView, а QWidget. Соответственно, закрашивание происходит методами виджета - на всю форму, не зависимо от КанвьІ (про которую виджет ни слухом ни духом).


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

а у виджета есть метод QWidget::setPaletteBackgroundColor (где там QWidget::setBackgroundColor()? - я не нашел), который бессилен против произвола канвы

я думаю, что нужно сначала копать в методы QCanvasView, QScrollView, но там ничего интересного не нашел. В QFrame тоже ничего нет, а QWidget-овские методы не работают

Цитировать
Нужно использовать метод самой КанвьІ QCanvas::setBackgroundColor().


с канвой все ok, она такая, какой я ее хотел видеть :)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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