crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QGridLayout отжирает 200мб памяти, Qt 4.6
Andrewshkovskii
  опции профиля:
сообщение 9.4.2010, 2:28
Сообщение #1


Активный участник
***

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

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




Репутация:   1  


В цикле "хитро" размещаю сабклас от QPushButton :

    int k,l=0;
    for(int i=0;i<etalons.size();++i)
    {
            ui->gridLayout->addWidget(etalons[i],k,l);
            if(l!=2)
                ++l;
            else
                {
                    l=0;
                    ++k;
                }
    }

Ну там по 3 кнопки в строке.
И отрижает это дело почему-то 200мб оперативки.
А если просто через addWidget(* QWidget), то все нормально.
с чего может быть такое поведение?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 9.4.2010, 8:42
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Где-то я уже видел эту программу...

Без исходников сложно сказать что-либо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 9.4.2010, 11:42
Сообщение #3


Активный участник
***

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

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




Репутация:   1  


Интересно где, если я её вчера начал писать?:))
А какие исходники?Вся загвоздка в этом цикле идет, если сделать простое добавление (без указания номера строки и столбца) то все нормально.
Добавил код :
Раскрывающийся текст
#ifndef ETALON_H
#define ETALON_H

#include <QPushButton>
#include <QPixmap>
#include <QFile>
#include <QDataStream>
#include <QIcon>


class Etalon : public QPushButton
{
Q_OBJECT

private:
    QFile * etalonFile_;
    QPixmap * picture_;

public:
    explicit Etalon(QWidget *parent = 0);
    Etalon (QString name);
    QString getName() {return this->text();};
    QPixmap * picture() {return this->picture_;};
    void setPixmap(QPixmap  pixmap) {delete picture_; this->picture_ = new QPixmap(pixmap);};
    signed int state;// -1 - nothing, 0 - new, 1 - name edited, 2 - image edited, 3- name and image edited

signals:

public slots:
    void updateIcon();
};

#endif // ETALON_H


Раскрывающийся текст
#include "etalon.h"
#include <QDebug>

Etalon::Etalon(QWidget *parent) :
    QPushButton(parent)
{
     picture_ = new QPixmap(240,240);//empty pixmap
     picture_->fill();
}

Etalon::Etalon(QString name)
{
    this->state=-1;
    this->setText(name);
    picture_ = new QPixmap();
    if(picture_->load(".\\images\\"+this->text()+".PNG"))
           this->updateIcon();
}

void Etalon::updateIcon()
{
    this->setIcon(QIcon(*picture_));
}


Храняться эталоны в векторе. добовляются на интерфейс вот так вот :
void MainWindow::setEtalonsButton()
{
    int k,l=0;
    for(int i=0;i<etalons.size();++i)
    {
            ui->gridLayout->addWidget(etalons[i],k,l);
            if(l!=2)
                ++l;
            else
               {
                   l=0;
                   ++k;
                }
    }
}




Сообщение отредактировал Andrewshkovskii - 9.4.2010, 13:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 9.4.2010, 13:38
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

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




Репутация:   0  


etalons
переменная какой тип?
надеюсь виджеты там не по значению

я бы попробовал подебажить и глянуть чем addWidget(QWidget*) отличается от addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
видимо первая это:
void QLayout::addWidget ( QWidget * w )

а вторая:
void QGridLayout::addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )

вот и смотрите чем их внутринности отличаются...
З.Ы переменные называть буквой l не ходится, ибо читается она как 1(единица) ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 9.4.2010, 13:49
Сообщение #5


Активный участник
***

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

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




Репутация:   1  


etalons вектор Etalon, а Etalon Эт сабкласс от QPushbutton.
Спасибо, сейчас посмотрю именно код..
Ну у меня в QtCreator все нормально читается:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 9.4.2010, 13:52
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


void MainWindow::setEtalonsButton()
{
    int k,l=0;
    ...
}

Что ожидается от этой конструкции?

Переменная k - не инициализированна. Может быть большое прибольшое число. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 9.4.2010, 13:59
Сообщение #7


Активный участник
***

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

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




Репутация:   1  


Ох моя память..подумал про множественную инициализацую в таком виде и сгрешил..простите:)
Спасибо!

Сообщение отредактировал Andrewshkovskii - 9.4.2010, 13:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 10.4.2010, 15:07
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Andrewshkovskii @ 9.4.2010, 12:42) *
Интересно где, если я её вчера начал писать?:))


:) да нет, давно ты её уже пишешь:



http://www.forum.crossplatform.ru/index.ph...c=3907&st=0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 10.4.2010, 22:12
Сообщение #9


Активный участник
***

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

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




Репутация:   1  


Оффтопик мы с тобой щас разведем!Это было простой рекогнайзер, алгоритм другой. А сейчас почти такая же, только алгоритм другой, любые символы.в общем другая лаба:)Ту программу я давно донаписал!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 15.9.2019, 15:28