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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятки с QPixmapCache  (Прочитано 8490 раз)
i9
Гость
« : Октябрь 06, 2005, 23:28 »

Хочу сделать глобально хранилище картинок и в нужных местах вставлять нужные картинки, НО QPixmapCache очень странно ведет себя: после запуска секунд через 30 если идет обращение к QPixmapCache, то программа вылетает по Segmentation fault (работаю под линой, возможно под виндой что-то другое происходит)

P.S. Qt 3.3.3
Храниличе QMimeSourceFactory можно предлогать только если знаете как с ним по простому работать я же не могу перечислять все картинки в *.pro мне нужно их добавлять в процессе выполнения. Конвертирование в XPM тоже не годится...

cls.cpp
Код:

#include <qpixmapcache.h>
#include <qpushbutton.h>

extern QPixmapCache *pc;

class aaa : public QPushButton{
  Q_OBJECT
  public:
  aaa( const QString & text, QWidget * parent, const char * name = 0 ):QPushButton( text, parent, name ){
    setIconSet( *pc->find("pic"));
  }
  ~aaa(){}
  public slots:
    void aaaa(){
      aaa *a = new aaa("zzzzz",0);
      a->show();
    }
};


cls.h
Код:
#include "cls.h"
QPixmapCache *pc=NULL;


main.cpp
Код:
#include <qapplication.h>
#include <qpixmapcache.h>
#include <qpushbutton.h>
#include "cls.h"

int main( int argc, char ** argv ){

  QApplication a( argc, argv );
  pc->insert("pic",QPixmap("/path_to/a.png"));

  aaa b("butt",0);
  a.setMainWidget ( &b );
  a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
  a.connect( &b, SIGNAL( clicked() ), &b, SLOT( aaaa() ) );
  b.show();

  return a.exec();
}
Записан
lepsai
Гость
« Ответ #1 : Октябрь 07, 2005, 00:19 »

интересно, а где:

Код:

pc = new QPixmapCache(...);


начнём, так сказать, с простого...
Записан
nEoN
Гость
« Ответ #2 : Октябрь 07, 2005, 09:12 »

Вообще то объект QPixmapCache  лучше не создавать, этот класс состоит только из статических методов.

Вместо
Код:
pc->insert("pic",QPixmap("/path_to/a.png"));

нужно так :
Код:
QPixmapCache::insert("pic",QPixmap("/path_to/a.png"));
Записан
lepsai
Гость
« Ответ #3 : Октябрь 07, 2005, 11:34 »

ну это один хрен, вопрос падает ли по причине ошбики с памятью или по какой то другой
Записан
i9
Гость
« Ответ #4 : Октябрь 07, 2005, 13:30 »

Цитата: "lepsai"
интересно, а где:
pc = new QPixmapCache(...);
начнём, так сказать, с простого...


В другой проге (большей по размеру, эту я как пример наваял...)
pc = new QPixmapCache();
конечно же был, тут забыл поставить, но уже проверил - не влияет это "1",
 а "2" - в qpixmapcache.h и конструктора-то у данного класса нет, похоже его таки нужно как статику использовать, сейчас попробую...
Записан
i9
Гость
« Ответ #5 : Октябрь 07, 2005, 13:33 »

Сорри за офтопик, непонятка в форумом - почему-то в моих сообщениях теги не работают... :-))
Записан
i9
Гость
« Ответ #6 : Октябрь 07, 2005, 13:38 »

Переделал без использования переменной pc. Используя:
QPixmapCache::insert("pic",QPixmap("/path_to/a.png"));
и
QPixmapCache::find("pic");
 - поведение программы такое же.... :-(
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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