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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: При создании QHBoxLayout появляется непонятный артефакт  (Прочитано 4685 раз)
stlex
Гость
« : Июнь 16, 2009, 17:23 »

Доброго времени суток! Я в Qt полный чайник. пытаюсь нарисовать форму - справа фрейм с видгетами, слева место для рисования в канве. 

Код
C++ (Qt)
class MyWidget : public QMainWindow
........
MyWidget::MyWidget ()
{    
   layout10 = new QHBoxLayout( this, 0, 6, "layout10");
   spacer12 = new QSpacerItem( 20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding );
   layout10->addItem( spacer12 );
   frame12 = new QFrame( this, "frame12" );
   frame12->setMaximumSize( QSize( 150, 32767 ) );
   frame12->setFrameShape( QFrame::StyledPanel );
   frame12->setFrameShadow( QFrame::Raised );
   layout10->addWidget( frame12 );
   resize( QSize(649, 648).expandedTo(minimumSizeHint()) );
}
 

в левом верхнем углу формы появляется прямоугольник, на котором не появляется нарисованное в канве окна   (смотрите http://www.salekhard.org/temp/example.jpg )
Код
C++ (Qt)
 
void MyWidget::paintEvent (QPaintEvent* paintEvent)
{
   QPainter p;                
   p.begin(this);              
.......

Помогите пожалуйста, я по разному пытался, не выходит ничего
« Последнее редактирование: Июнь 16, 2009, 17:33 от stlex » Записан
spectre71
Гость
« Ответ #1 : Июнь 16, 2009, 17:35 »

1) А не проще вместо QSpacerItem положиьт QWidget на котором потом и рисовать.
2) Убери приведенный тобой код из MyWidget::MyWidget () и посмотри что получится.
Записан
spectre71
Гость
« Ответ #2 : Июнь 16, 2009, 17:44 »

Может надо сделать

layout10 = new QHBoxLayout( centralWidget (), 0, 6, "layout10");
Записан
stlex
Гость
« Ответ #3 : Июнь 16, 2009, 17:44 »

Цитировать
1) А не проще вместо QSpacerItem положиьт QWidget на котором потом и рисовать.
2) Убери приведенный тобой код из MyWidget::MyWidget () и посмотри что получится.

1) Хорошая идея, попробую
2) Если убираю  layout10 = new QHBoxLayout( this, 0, 6, "layout10") , фигня исчезает
Записан
stlex
Гость
« Ответ #4 : Июнь 16, 2009, 17:52 »

Цитировать
Может надо сделать

layout10 = new QHBoxLayout( centralWidget (), 0, 6, "layout10");

В этом случае фрейм с рамкой появляется как раз там, где был артефакт :-))
Записан
stlex
Гость
« Ответ #5 : Июнь 16, 2009, 18:05 »

Спасибо, проблема решена, создал слева новый фрейм, на нем и рисую. Но глюк интересный.
Записан
spectre71
Гость
« Ответ #6 : Июнь 16, 2009, 18:09 »

Ты посмотри в доке что такое QMainWindow - его структуру.
На нем уже есть другие специальные виджеты, а ты пытаешься на нем рисовать.
Вот они и прекрывают твой рисунок.
Либо используй QWidget вместо QMainWindow, либо сделай правильную компоновку и рисуй на виджите на котором больше ничего не лежит.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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