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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: На виджете не отображается изображение (QPixmap)  (Прочитано 5031 раз)
Егор
Гость
« : Октябрь 29, 2014, 14:27 »

Имеется 2 класса. В одном формируется главное окно, а в другом производится рисование на виджете.
Код рисования:
Код:
#include "picture.h"
#include <QtGui>

Picture::Picture(QWidget* wid):
    QWidget(wid)

{
}

void Picture::paintEvent(QPaintEvent *){
    QPainter paint;

    paint.begin(this);

    QPixmap picture("E:\\Projects\\Qt\\Graphics_BLA\\1.jpg");
    paint.drawPixmap(0,0,picture);

    paint.end();
    resize(550, 550);
}

Код главного виджета:
Код:
#include "graphics.h"
#include <QtGui>
#include "picture.h"

Graphics::Graphics(QWidget *wid):
    QWidget(wid),
    pribSpeed(0),
    vertSpeed(0),
    bortSpeed(0),
    biomHeight(0),
    geomHeight(0)
{
    QHBoxLayout* mainLay=new QHBoxLayout;   //Основной компановщик

    QHBoxLayout* groupLay=new QHBoxLayout;  //Компановщик для отображения групп
    //...
    Picture pict;
    QGroupBox* pictBox=new QGroupBox("Отображение");
    pictBox->setFixedSize(550, 550);

    QHBoxLayout* pictLay=new QHBoxLayout;
    pictLay->addWidget(&pict);
    pictBox->setLayout(pictLay);
    groupLay->addWidget(pictBox);
    //================================================

    setWindowTitle("Телеметрия");
    mainLay->addLayout(groupLay);
    setLayout(mainLay);

В итоге получаю такое окно (скриншот ниже).
Если создать только объект класса Picture и поместить его в другой виджет, без компановок и прочего, рисунок отображается.
Так где же здесь недочёт? Если нужно, могу весь код основного класса кинуть.
« Последнее редактирование: Октябрь 29, 2014, 14:34 от Егор » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Октябрь 29, 2014, 14:32 »

Код:
Picture pict;
Выделите память под виджет в куче (Picture * pict = new Picture(); ) сейчас вы его в стеке создаете и после выхода из функции стек уничтожается и соответственно ваш виджет тоже убивается.
Записан

Егор
Гость
« Ответ #2 : Октябрь 29, 2014, 14:39 »

Код:
Picture pict;
Выделите память под виджет в куче (Picture * pict = new Picture(); ) сейчас вы его в стеке создаете и после выхода из функции стек уничтожается и соответственно ваш виджет тоже убивается.
Не помогло.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Октябрь 29, 2014, 14:41 »

Должно было помочь, давайте сюда архив с исходниками, у себя посмотрю )
Записан

Егор
Гость
« Ответ #4 : Октябрь 29, 2014, 14:44 »

А нет, простите, помогло. Просто путь до изображения забыл изменить).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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