PDA

View Full Version : Something fishy about Model, data doesn't show up!



zlosynus
4th August 2008, 12:58
Hi, I am using Qt Jambi. I was trying to subclass QAbstractListModel and use it with QListView. But no data appears at all. Here is code of my subclassed model:



class SmenaDispeceriModel extends QAbstractListModel
{
private List dispeceri = new ArrayList(); // data

public int rowCount(QModelIndex parent)
{
return dispeceri.size();
}

public Object data(QModelIndex index, int role)
{
if (index.row() < 0 || index.row() >= dispeceri.size())
return new Object();

if (role == Qt.ItemDataRole.DisplayRole)
return ((SmenaDispecer) dispeceri.get(index.row())).getDlouheJmeno();
else
return new Object();
}

public void addDispecera(Long id, String jmeno, String prijmeni)
{
dispeceri.add(new SmenaDispecer(id, jmeno, prijmeni));
}
}


Now in dialog I have following sample code:



dispeceriModel = new SmenaDispeceriModel();

dispeceriModel.addDispecera(new Long(1), "Karel", "Novak");
dispeceriModel.addDispecera(new Long(2), "Tomas", "Marny");
ui.listDispeceri.setModel(dispeceriModel);


But the view is empty! When I tried following code, it works fine:


model = new QStandardItemModel();
model.setRowCount(2);
model.setColumnCount(1);
model.setData(model.index(0, 0), "Some text");
model.setData(model.index(1, 0), "Other text");
ui.listDispeceri.setModel(model);


So there have to be some problem with my model, but i dont know where. Please help.

Thanks.

caduel
4th August 2008, 14:03
Try implementing columnCount() as well.
If that does not help: add debug-statements in data() to check if/for what indexes/roles it gets called.

HTH

zlosynus
4th August 2008, 14:27
Hi,

I cant implement columnCount, because I use QAbstractListModel, which has it already implemented.

I addded debuging statement and I got following:


public Object data(QModelIndex index, int role)
{
System.out.println(index);
System.out.println(role);
if (index.row() < 0 || index.row() >= dispeceri.size())
return new Object();

if (role == Qt.ItemDataRole.DisplayRole)
return ((SmenaDispecer) dispeceri.get(index.row())).getDlouheJmeno();
else
return new Object();
}

zlosynus
4th August 2008, 14:30
Hi,

I cant implement columnCount, because I use QAbstractListModel, which has it already implemented.

I addded debuging statement:


public Object data(QModelIndex index, int role)
{
System.out.println(index);
System.out.println(role);
if (index.row() < 0 || index.row() >= dispeceri.size())
return new Object();

if (role == Qt.ItemDataRole.DisplayRole)
return ((SmenaDispecer) dispeceri.get(index.row())).getDlouheJmeno();
else
return new Object();
}


and got following (running in ant):


[java] QModelIndex(row=0,col=0,internal=0)
[java] 13
[java] QModelIndex(row=1,col=0,internal=0)
[java] 13
[java] QModelIndex(row=2,col=0,internal=0)
[java] 13
[java] QModelIndex(row=3,col=0,internal=0)
[java] 13
[java] QModelIndex(row=4,col=0,internal=0)
[java] 13


Pretty weard is, that when I use QTableView instead of QListView, everything works fine!

caduel
4th August 2008, 16:07
I am not experienced with Jambi.
And the code does look ok to me.

Try calling the base class instead of 'only' returning "new Object()".