crossplatform.ru

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


  Ответ в QGridLayout отжирает 200мб памяти
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Andrewshkovskii Дата 10.4.2010, 22:12
  Оффтопик мы с тобой щас разведем!Это было простой рекогнайзер, алгоритм другой. А сейчас почти такая же, только алгоритм другой, любые символы.в общем другая лаба:)Ту программу я давно донаписал!
SABROG Дата 10.4.2010, 15:07
 
Цитата(Andrewshkovskii @ 9.4.2010, 12:42) *
Интересно где, если я её вчера начал писать?:))


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



http://www.forum.crossplatform.ru/index.ph...c=3907&st=0
Andrewshkovskii Дата 9.4.2010, 13:59
  Ох моя память..подумал про множественную инициализацую в таком виде и сгрешил..простите:)
Спасибо!
BRE Дата 9.4.2010, 13:52
 
void MainWindow::setEtalonsButton()
{
    int k,l=0;
    ...
}

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

Переменная k - не инициализированна. Может быть большое прибольшое число. ;)
Andrewshkovskii Дата 9.4.2010, 13:49
  etalons вектор Etalon, а Etalon Эт сабкласс от QPushbutton.
Спасибо, сейчас посмотрю именно код..
Ну у меня в QtCreator все нормально читается:)
DIMEDROLL Дата 9.4.2010, 13:38
 
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, 11:42
  Интересно где, если я её вчера начал писать?:))
А какие исходники?Вся загвоздка в этом цикле идет, если сделать простое добавление (без указания номера строки и столбца) то все нормально.
Добавил код :
Раскрывающийся текст
#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;
                }
    }
}


SABROG Дата 9.4.2010, 8:42
  Где-то я уже видел эту программу...

Без исходников сложно сказать что-либо.
Andrewshkovskii Дата 9.4.2010, 2:28
  В цикле "хитро" размещаю сабклас от 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), то все нормально.
с чего может быть такое поведение?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 13:20