PDA

View Full Version : Issues while generating a view with QStandardModel,QStandardItem & QTreeview



namus
16th April 2012, 14:47
/*creating an QStandardItem & appending 2 new QStandardItems such that

nameItem
|
|-------cyName //having a text to set at runtime
|-------cll //having a text to set at runtime

*/
QStandardItem* MainWindow::createNewCRListItem(const QStringList &sList)
{
nameItem=new QStandardItem();
nameItem->setFlags(Qt::NoItemFlags);
nameItem->setColumnCount(1);

QIcon lIcon(":/images/contact.png");
nameItem->setIcon(lIcon);
nameItem->data(Qt::DisplayRole);
QStandardItem cyName;
QStandardItem cll;


if(sList.size()!=3)
Q_ASSERT("error in parsing string list ");

for (int j=0;j<sList.size();j++)
{
if (j==0)
{
const QString str= sList.at(j);
nameItem->setText(str);
qDebug()<< str;
}
if(j==1)
{
const QString str= sList.at(j);
cyName.setText(str);
qDebug()<< str;
}
if(j==2)
{
const QString str= sList.at(j);
cll.setText(str);
qDebug()<< str;
}
}
nameItem->appendRow(&cyName);
nameItem->appendRow(&cll);
//emit nameItem->emitDataChanged();
return nameItem;
}

/* get a QList<QStringList> from parsing object
create a QStandardItem (above func)
set that QStandaradItem to a QStandardModel
later .. set the QStandardItem to QTreeView as shown below
*/
void MainWindow::getlistFromParse( parseClass &pObj)
{

list = pObj.getList(); //return the reference of list
int modelSize= list.size();
int itemRow;
qDebug()<< "Row cont "<< modelSize;
crItemModel.setRowCount(modelSize);
qDebug()<<"check row: "<<crItemModel.rowCount();
crItemModel.setColumnCount(1);
qDebug()<<"check col : "<<crItemModel.columnCount();

QList<QStringList>::const_iterator i;
for(i=list.constBegin(),itemRow=0;i!=list.constEnd ();itemRow++,i++)
{
const QStringList& subList=*i;
QStandardItem *item= MainWindow::createNewCRListItem(subList);

crItemModel.appendRow(item); //application closing unexpectedly
//crItemModel.setItem(itemRow,1,item);
}
}


while the stack trace shows segmantation fault in crItemModel.appendRow(item);
crItemModel is of type QStandardModel
and


tree = new QTreeView(parent);
tree->setModel(&crItemModel);

norobro
17th April 2012, 03:26
Think about scope:

QStandardItem cyName;
QStandardItem cll;

namus
17th April 2012, 11:06
I am so stupid on this.
Thanks a lot.