crossplatform.ru

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

> SIGSEGV при установлении модели ( QTableView->setModel )
avkushnarenko
  опции профиля:
сообщение 16.10.2014, 18:05
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.10.2014
Пользователь №: 4250

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




Репутация:   0  


Здравсвуйте, Уважаемые. При разработке интерфейса столкнулся с проблемой перманентного SIGSEGV при вызове метода ui->tableSorts->setModel(model);
Итак, имею некоторый тип
template <typename TFloat>
struct ParticleKind {

    ParticleKind(uint iid = 0): id(iid),
            min_radius(0.5),  max_radius(0.5),
            min_alpha(0.1),   max_alpha(1.00),
            min_density(1000), max_density(1000) {}
    ParticleKind(uint iid,
            TFloat r_min, TFloat r_max,
            TFloat a_min, TFloat a_max,
            TFloat dens_min, TFloat dens_max):
                id(iid),
                min_radius(r_min),  max_radius(r_max),
                min_alpha(a_min),   max_alpha(a_max),
                min_density(dens_min), max_density(dens_max)  {}

    template <typename TFloat2>
    ParticleKind(ParticleKind<TFloat2> &pk):
        id(0) {
        operator =<TFloat2>(pk);
    }

    template <typename TFloat2>
    const ParticleKind& operator=(const ParticleKind<TFloat2> &pk) {
        id = pk.id;
        return *this;
    }

    template <typename TFloat2>
    bool operator==(ParticleKind<TFloat2> pk) {
        return id == pk.id;
    }

    static ParticleKind<TFloat> null_kind() {
        return ParticleKind<TFloat>();
    }

    uint id;

    TFloat min_radius, max_radius, min_alpha, max_alpha,
        min_density, max_density;

    void setMinRadius(const TFloat value){
        min_radius = value;
    }
    void setMaxRadius(const TFloat value){
        max_radius = value;
    }
    void setMinAlpha(const TFloat value){
        min_alpha = value;
    }
    void setMaxAlpha(const TFloat value){
        max_alpha = value;
    }
    void setMinDensity(const TFloat value){
        min_density = value;
    }
    void setMaxDensity(const TFloat value){
        max_density = value;
    }
};

Желаю написать редактор набора экземпляров такого типа в отдельном диалоге. Создаю диалог
class CEditParticleSortDialog : public QDialog
{
    Q_OBJECT

public:
    explicit CEditParticleSortDialog(QWidget *parent = 0);
    ~CEditParticleSortDialog();

private:
    Ui::CEditParticleSortDialog *ui;
    CSortsTableModel* model;
};

В котором содержится модель CSortsTableModel
class CSortsTableModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    explicit CSortsTableModel(QObject *parent = 0);
    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) const;
    QVariant headerData(int section,Qt::Orientation orientation, int role=Qt::DisplayRole) const;
    Qt::ItemFlags flags(const QModelIndex &index) const;
signals:
private:
    QList< ParticleKind<float> > kinds;
};


Соответственно, устанавливаю эту модель
CEditParticleSortDialog::CEditParticleSortDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CEditParticleSortDialog),
    model(new CSortsTableModel)

{
    ui->setupUi(this);
    ui->tableSorts->setModel(model);
    ui->tableSorts->setItemDelegate( new CParticleKindDelegate(this) );
}


В ui->tableSorts->setModel(model); SIGSEGV

Гуление и изучение документиации не помогло. Перепробовал множество вариантов безрезультатно.
Вопрос: в чём причина возникновения ошибки? Как её устранить?
Подробности при обсуждении.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 2.12.2024, 8:14