Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QGridLayout отжирает 200мб памяти
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Andrewshkovskii
В цикле "хитро" размещаю сабклас от 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
Где-то я уже видел эту программу...

Без исходников сложно сказать что-либо.
Andrewshkovskii
Интересно где, если я её вчера начал писать?:))
А какие исходники?Вся загвоздка в этом цикле идет, если сделать простое добавление (без указания номера строки и столбца) то все нормально.
Добавил код :
Раскрывающийся текст
#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;
                }
    }
}


DIMEDROLL
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
etalons вектор Etalon, а Etalon Эт сабкласс от QPushbutton.
Спасибо, сейчас посмотрю именно код..
Ну у меня в QtCreator все нормально читается:)
BRE
void MainWindow::setEtalonsButton()
{
    int k,l=0;
    ...
}

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

Переменная k - не инициализированна. Может быть большое прибольшое число. ;)
Andrewshkovskii
Ох моя память..подумал про множественную инициализацую в таком виде и сгрешил..простите:)
Спасибо!
SABROG
Цитата(Andrewshkovskii @ 9.4.2010, 12:42) *
Интересно где, если я её вчера начал писать?:))


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



http://www.forum.crossplatform.ru/index.ph...c=3907&st=0
Andrewshkovskii
Оффтопик мы с тобой щас разведем!Это было простой рекогнайзер, алгоритм другой. А сейчас почти такая же, только алгоритм другой, любые символы.в общем другая лаба:)Ту программу я давно донаписал!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.