crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> преобразованный QWidget не отрисовывается на форме
efg
  опции профиля:
сообщение 7.5.2011, 9:34
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


буквально: написал свой виджет (унаследовал от QWidget), который генерирует лабиринты. если создавать и показывать его - нормально работает. если добавить на форму QWidget и преобразовать в мой класс, нифига не отрисовывается, форма пустая. из-за чего подобное может происходить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.5.2011, 13:29
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(efg @ 7.5.2011, 12:34) *
если создавать и показывать его - нормально работает
в компоновщике тоже нормально работает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 7.5.2011, 22:19
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 7.5.2011, 13:29) *
в компоновщике тоже нормально работает?

не-а, пустота
    QWidget* window=new QWidget;

    mazegame* game = new mazegame();

    QHBoxLayout* layout=new QHBoxLayout;
    layout->addWidget(game);
    window->setLayout(layout);
    window->show();

размеры окна устанавливаются правильно; если создавать QMainWindow* window, то окно произвольного размера
кажет только так:
    mazegame* game = new mazegame();
    game->show();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.5.2011, 8:10
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(efg @ 8.5.2011, 1:19) *
не-а, пустота
значит не соблюдил все правила создания собственного наследника от QWidget

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 8.5.2011, 15:11
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 8.5.2011, 9:10) *
Цитата(efg @ 8.5.2011, 1:19) *
не-а, пустота
значит не соблюдил все правила создания собственного наследника от QWidget

Переопределил sizeHint():
QSize mazegame::sizeHint() const {
    return QSize(459,459);
}

Переопределил minimumSizeHint():
QSize mazegame::minimumSizeHint() const {
    return QSize(459,459);
}

В конструкторе вызвал setSizePolicy():
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);

и на всякий случай updateGeometry();
только вот ничего не изменилось
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.5.2011, 21:41
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Если переопределял paintEvent(), то для теста закоментируй в нём всё и первой же строчкой вызови метод базового класса.
Что при этом получишь?

П.С.
Пока тестируй свой виджет на простейшем коде:
#include <QtGui>
#include "mywidget.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget window;
    QHBoxLayout* layout=new QHBoxLayout;
    
    mazegame *test = new mazegame();
    QLabel *left = new QLabel("left");
    QLabel *right = new QLabel("right");
    
    layout->addWidget(left);
    layout->addWidget(test);
    layout->addWidget(right);
    
    window->setLayout(layout);

    window.show();
    return app.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 8.5.2011, 22:01
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 8.5.2011, 22:41) *
закоментируй в нём всё и первой же строчкой вызови метод базового класса.

как? this->QWidget::repaint(); приводит к рекурсии
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.5.2011, 22:11
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(efg @ 9.5.2011, 1:01) *
this->QWidget::repaint(); приводит к рекурсии
вобще не то.
QWidget::paintEvent();


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 8.5.2011, 22:53
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 8.5.2011, 23:11) *
Цитата(efg @ 9.5.2011, 1:01) *
this->QWidget::repaint(); приводит к рекурсии
вобще не то.
QWidget::paintEvent();



..\qmaze\mazegame.cpp: In member function 'virtual void mazegame::paintEvent(QPaintEvent*)':
..\qmaze\mazegame.cpp:94: error: no matching function for call to 'mazegame::paintEvent()'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.5.2011, 6:50
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


efg, приведи код paintEvent(), который у тебя получился в конечном итоге, что-то ты делаешь не то, что я тебе говорю.

у тебя должно было получится так:
void mazegame::paintEvent(QPaintEvent *e)
{
    QWidget::paintEvent(e);
/*
ТУТ ТВОЙ КОД
*/
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 17:20