Здравсвуйте, Уважаемые. При разработке интерфейса столкнулся с проблемой перманентного 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
Гуление и изучение документиации не помогло. Перепробовал множество вариантов безрезультатно.
Вопрос: в чём причина возникновения ошибки? Как её устранить?
Подробности при обсуждении.