Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QAbstractTableModel run data() several times even if there are no modifications



  • Hello,
    I have implement my QAbstractTableModel. and it run several times XfTableModelQlist::data. I have no connection from any signals to update it.

    class XfTableModelQlist : public QAbstractTableModel
    {
    	Q_OBJECT
    public:
    	explicit XfTableModelQlist(QObject *parent = 0);
    	~XfTableModelQlist();
    	int rowCount(const QModelIndex &parent = QModelIndex()) const ;
    	int columnCount(const QModelIndex &parent = QModelIndex()) const;
    	QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
    	QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    	Qt::ItemFlags flags(const QModelIndex & index) const ;
    
    	U2bYTES	nQlist;
    	struct lineaXfQlist  arlineasXf[LINEASxF];
    	QBrush  linea0B, linea1B;
    	QBrush  linea0F, linea1F;
    };
    
    XfTableModelQlist::XfTableModelQlist(QObject *parent)
    	:QAbstractTableModel(parent)
    {
    	for (int i=0; i<LINEASxF; ++i)
    	{
    		arlineasXf[i].nCue=0;
    		arlineasXf[i].cc=new sQ;
    	}
    }
    XfTableModelQlist::~XfTableModelQlist()
    {
    	for (int i=0; i<LINEASxF; ++i)
    		delete arlineasXf[i].cc;
    }
    int XfTableModelQlist::rowCount(const QModelIndex &/*parent*/) const
    {
    	int i;
    	for (i=2; i<LINEASxF; ++i)
    		if (!arlineasXf[i].nCue)
    			break;
    	return (i);
    }
    #define NcOLUMNASxFq 17		//Numero de columnas de
    int XfTableModelQlist::columnCount(const QModelIndex &/*parent*/) const
    {
    	return (NcOLUMNASxFq);
    }
    QVariant XfTableModelQlist::headerData(int section, Qt::Orientation orientation, int role) const
    {
    	if (role==Qt::DisplayRole && orientation==Qt::Horizontal)
    	{
    		static const char* const xxx[NcOLUMNASxFq]={"Cue/+","Icon","Text","T(In)","T(Out)","T(Auto)","T(Wait In)","T(Wait Out)","Timing","MIB","MIB Time","Track","OnlyQ","Sh.Mode","Info","Jump","Loop"};
    		if (section<NcOLUMNASxFq) return (QString(xxx[section]));
    	}
    	return QVariant();
    }
    QVariant XfTableModelQlist::data(const QModelIndex &index, int role) const
    {
    	QMutexLocker locker(mutexHeap);
    	qDebug()<<" IndexColum = "<< index.column() << " IndexRow = " << index.row() << " IndexRole = " << role;
    	if (role==Qt::DisplayRole)
    	{
    		char    s[200];
    		s[0]='\0';
    		if (index.row()<=1 && index.column()==0)// el cue puede ser 0 y tener MASdEuNAcUE en X1/X2
    		{
    			U2bYTES nCue=arlineasXf[index.row()].nCue;
    			int i=0;
    			if (nCue&MASdEuNAcUE)
    			{
    				i=sprintf(s, "*");
    				nCue&=~MASdEuNAcUE;
    			}
    			sNumeroDecP (s+i, nCue, LEFT);
    			return (QString(s));
    		}
    		if (arlineasXf[index.row()].nCue)
    		{
    			StqLIST	*pT=getDireccionQlist(IGUAL, nQlist);
    			if(pT != nullptr)
    			{
    				sQ*	pQ=arlineasXf[index.row()].cc;
    				switch(index.column())
    				{
    				case 0:// Cue/+
    					sNumeroDecP (s, pQ->u.cue.n, LEFT);  break;
    				case 2:// Text
    					copyText (s, pQ->u.cue.texto, sizeof (pQ->u.cue.texto)); break;
    				case 3:// T(In)
    					sTimeP (s, pQ->u.cue.tIn?pQ->u.cue.tIn:pT->tIn, LEFT); break;
    				case 4:// T(Out)
    					sTimeP (s, pQ->u.cue.tOut?pQ->u.cue.tOut:pT->tOut, LEFT); break;
    				case 5:// T(Auto)
    					sTimeP (s, pQ->u.cue.tAuto?pQ->u.cue.tAuto:pT->tAuto, LEFT); break;
    				case 6:// T(Wait In)
    					sTimeP (s, pQ->u.cue.tWIn?pQ->u.cue.tWIn:pT->tWIn, LEFT); break;
    				case 7:// T(Wait Out)
    					sTimeP (s, pQ->u.cue.tWOut?pQ->u.cue.tWOut:pT->tWOut, LEFT); break;
    				case 8:// Timing
    					sprintf (s, "T%u", pQ->u.cue.timing?pQ->u.cue.timing:pT->timing); break;
    				case 9:// MIB
    					if(pQ->u.cue.mibCueComienzo)
    					{
    						s[0]='Q';
    						sNumeroDecP (s+1, pQ->u.cue.mibCueComienzo, LEFT);
    					}
    					else
    						strcpy (s, pQ->u.cue.mibFlags&CUEfIXEDmIB?"None":"");
    					break;
    				case 10:// MIB Time
    					sTimeP (s, pQ->u.cue.mibTime?pQ->u.cue.mibTime:pT->mibTime, LEFT); break;
    				case 11:// track
    					strcpy (s, textQlistTrack(pQ->u.cue.track?pQ->u.cue.track:pT->track));	break;
    				case 13:// shapeTrack
    					strcpy (s, textQlistShapeTrack(pQ->u.cue.shapeTrack?pQ->u.cue.shapeTrack:pT->shapeTrack)); break;
    				case 14:// Info
    					strcpy (s, textQlistInfoQ(pQ)); break;
    				case 15:// jumpsQlistCue
    					if (pQ->u.cue.jumpsQlistCue!=0)
    						sNumeroDecP (s, pQ->u.cue.jumpsQlistCue, LEFT); break;
    					break;
    				case 16:// nJumpsQlistCue
    					if (pQ->u.cue.nJumpsQlistCue != 0)
    						 sprintf (s, "%u", arlineasXf[index.row()].nJumpsCue);
    					break;
    				}
    			}
    		}
    		return (QString(s));
    	}
    	return QVariant();
    }
    Qt::ItemFlags XfTableModelQlist::flags(const QModelIndex &/*index*/) const
    {
    	return(Qt::NoItemFlags);
    }
    


  • @JonexElectronic

    QAbstractTableModel run data() several times even if there are no modifications

    What is your question? The data() method can and will be called as many times as the Qt infrastructure wants/needs to (even with the same input parameters). This has nothing to do with whether there are any modifications or not.

    As an unrelated observation: your implementation of XfTableModelQlist::flags() returns Qt::NoItemFlags. Are you aware this is quite "restrictive"? https://doc.qt.io/qt-5/qabstractitemmodel.html#flags

    The base class implementation returns a combination of flags that enables the item (ItemIsEnabled) and allows it to be selected (ItemIsSelectable).

    You have chosen not to return this or call the base implementation, so your items will be disabled and unselectable. Just so you know.



  • Are there any method to update the data only when I want to? My problem is that It is called many times in a seconds and it makes my app so slow



  • @JonexElectronic
    QAbstractTableModel::data() is a const method. It should not "update" any data, it is for reading what data is there. It is setData() which is used to update data. Where is your method updating anything?

    If something in your code there is "slow" in calculating just what to return (not modify) then you should optimise it as necessary. Is something of yours that data() calls very slow?

    You seem to be calling a mutex in your data(). That is a very bad idea for speed...!



  • @JonB My table is used only to show data. It is not interactive with the user. So, I thought that it is the best option, isn't it?
    No, When I said update, I read the data to show. I have deleted the mutex and no improvements.



  • @JonexElectronic said in QAbstractTableModel run data() several times even if there are no modifications:

    My table is used only to show data. It is not interactive with the user. So, I thought that it is the best option, isn't it?

    OK, that's fine.

    No, When I said update, I read the data to show. I have deleted the mutex and no improvements.

    Then find out which route of code it is following in your data() method and what it is which is slow, because we don't know. For example, I don't know but how long does your getDireccionQlist(IGUAL, nQlist) take? Or any of the other functions you call here? The one thing for sure is that you cannot control how many times your data() method gets called by Qt infrastructure (unless you are calling it explicitly yourself somewhere).



  • I added QTime::currentTime () to display the time and this it how it looks like

     IndexColum =  7  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.419")
     IndexColum =  8  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.419")
     IndexColum =  9  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.419")
     IndexColum =  9  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.420")
     IndexColum =  9  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.420")
     IndexColum =  9  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.420")
     IndexColum =  9  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.420")
     IndexColum =  9  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.420")
     IndexColum =  9  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.420")
     IndexColum =  10  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.420")
     IndexColum =  10  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.420")
     IndexColum =  10  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.420")
     IndexColum =  10  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.420")
     IndexColum =  10  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.420")
     IndexColum =  10  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.421")
     IndexColum =  10  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.421")
     IndexColum =  11  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.421")
     IndexColum =  12  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.422")
     IndexColum =  12  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.422")
     IndexColum =  12  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.422")
     IndexColum =  12  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.422")
     IndexColum =  12  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.422")
     IndexColum =  12  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.422")
     IndexColum =  12  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.422")
     IndexColum =  13  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.422")
     IndexColum =  13  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.422")
     IndexColum =  13  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.422")
     IndexColum =  13  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.423")
     IndexColum =  13  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.423")
     IndexColum =  13  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.423")
     IndexColum =  13  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.423")
     IndexColum =  14  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.424")
     IndexColum =  15  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.424")
     IndexColum =  16  IndexRow =  19  IndexRole =  6  CurrentTime  QTime("10:31:01.424")
     IndexColum =  16  IndexRow =  19  IndexRole =  7  CurrentTime  QTime("10:31:01.425")
     IndexColum =  16  IndexRow =  19  IndexRole =  9  CurrentTime  QTime("10:31:01.425")
     IndexColum =  16  IndexRow =  19  IndexRole =  10  CurrentTime  QTime("10:31:01.425")
     IndexColum =  16  IndexRow =  19  IndexRole =  1  CurrentTime  QTime("10:31:01.425")
     IndexColum =  16  IndexRow =  19  IndexRole =  0  CurrentTime  QTime("10:31:01.425")
     IndexColum =  16  IndexRow =  19  IndexRole =  8  CurrentTime  QTime("10:31:01.425")
     IndexColum =  0  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.484")
     IndexColum =  0  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.485")
     IndexColum =  0  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.485")
     IndexColum =  0  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.485")
     IndexColum =  0  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.485")
     IndexColum =  0  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.485")
     IndexColum =  0  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.485")
     IndexColum =  1  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.485")
     IndexColum =  1  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.485")
     IndexColum =  1  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.485")
     IndexColum =  1  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.486")
     IndexColum =  1  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.486")
     IndexColum =  1  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.486")
     IndexColum =  1  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.486")
     IndexColum =  2  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.486")
     IndexColum =  3  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.486")
     IndexColum =  3  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.487")
     IndexColum =  3  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.487")
     IndexColum =  3  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.487")
     IndexColum =  3  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.487")
     IndexColum =  3  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.487")
     IndexColum =  3  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.487")
     IndexColum =  4  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.487")
     IndexColum =  5  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.488")
     IndexColum =  5  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.488")
     IndexColum =  5  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.488")
     IndexColum =  5  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.488")
     IndexColum =  5  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.488")
     IndexColum =  5  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.488")
     IndexColum =  5  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.488")
     IndexColum =  6  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.488")
     IndexColum =  6  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.488")
     IndexColum =  6  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.488")
     IndexColum =  6  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.488")
     IndexColum =  6  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.488")
     IndexColum =  6  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.489")
     IndexColum =  6  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.489")
     IndexColum =  7  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.489")
     IndexColum =  8  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.489")
     IndexColum =  8  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.489")
     IndexColum =  8  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.489")
     IndexColum =  8  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.489")
     IndexColum =  8  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.490")
     IndexColum =  8  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.490")
     IndexColum =  8  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.490")
     IndexColum =  9  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.490")
     IndexColum =  10  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.490")
     IndexColum =  10  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.490")
     IndexColum =  10  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.490")
     IndexColum =  10  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.491")
     IndexColum =  10  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.491")
     IndexColum =  10  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.491")
     IndexColum =  10  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.491")
     IndexColum =  11  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.491")
     IndexColum =  12  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.491")
     IndexColum =  12  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.492")
     IndexColum =  12  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.492")
     IndexColum =  12  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.492")
     IndexColum =  12  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.492")
     IndexColum =  12  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.492")
     IndexColum =  12  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.492")
     IndexColum =  13  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.492")
     IndexColum =  14  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.493")
     IndexColum =  14  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.493")
     IndexColum =  14  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.493")
     IndexColum =  14  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.493")
     IndexColum =  14  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.493")
     IndexColum =  14  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.493")
     IndexColum =  14  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.493")
     IndexColum =  15  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.493")
     IndexColum =  15  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.493")
     IndexColum =  15  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.493")
     IndexColum =  15  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.493")
     IndexColum =  15  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.493")
     IndexColum =  15  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.494")
     IndexColum =  15  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  6  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  7  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  9  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  10  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  1  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  0  CurrentTime  QTime("10:31:01.494")
     IndexColum =  16  IndexRow =  0  IndexRole =  8  CurrentTime  QTime("10:31:01.494")
     IndexColum =  0  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.494")
     IndexColum =  0  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.494")
     IndexColum =  0  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.494")
     IndexColum =  0  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.495")
     IndexColum =  0  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.495")
     IndexColum =  0  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.495")
     IndexColum =  0  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.495")
     IndexColum =  1  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.495")
     IndexColum =  2  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.495")
     IndexColum =  2  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.496")
     IndexColum =  2  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.496")
     IndexColum =  2  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.496")
     IndexColum =  2  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.496")
     IndexColum =  2  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.496")
     IndexColum =  2  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.496")
     IndexColum =  3  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.496")
     IndexColum =  4  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.496")
     IndexColum =  4  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.497")
     IndexColum =  4  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.497")
     IndexColum =  4  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.497")
     IndexColum =  4  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.497")
     IndexColum =  4  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.497")
     IndexColum =  4  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.497")
     IndexColum =  5  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.497")
     IndexColum =  6  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.498")
     IndexColum =  6  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.498")
     IndexColum =  6  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.498")
     IndexColum =  6  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.498")
     IndexColum =  6  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.498")
     IndexColum =  6  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.498")
     IndexColum =  6  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.498")
     IndexColum =  7  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.498")
     IndexColum =  7  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.498")
     IndexColum =  7  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.498")
     IndexColum =  7  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.498")
     IndexColum =  7  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.498")
     IndexColum =  7  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.499")
     IndexColum =  7  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.499")
     IndexColum =  8  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.499")
     IndexColum =  9  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.499")
     IndexColum =  9  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.499")
     IndexColum =  9  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.499")
     IndexColum =  9  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.499")
     IndexColum =  9  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.500")
     IndexColum =  9  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.500")
     IndexColum =  9  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.500")
     IndexColum =  10  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.500")
     IndexColum =  11  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.500")
     IndexColum =  11  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.500")
     IndexColum =  11  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.500")
     IndexColum =  11  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.501")
     IndexColum =  11  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.501")
     IndexColum =  11  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.501")
     IndexColum =  11  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.501")
     IndexColum =  12  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.501")
     IndexColum =  13  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.501")
     IndexColum =  13  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.502")
     IndexColum =  13  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.502")
     IndexColum =  13  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.502")
     IndexColum =  13  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.502")
     IndexColum =  13  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.502")
     IndexColum =  13  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.502")
     IndexColum =  14  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.502")
     IndexColum =  15  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.503")
     IndexColum =  15  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.503")
     IndexColum =  15  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.503")
     IndexColum =  15  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.503")
     IndexColum =  15  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.503")
     IndexColum =  15  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.503")
     IndexColum =  15  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.503")
     IndexColum =  16  IndexRow =  1  IndexRole =  6  CurrentTime  QTime("10:31:01.503")
     IndexColum =  16  IndexRow =  1  IndexRole =  7  CurrentTime  QTime("10:31:01.503")
     IndexColum =  16  IndexRow =  1  IndexRole =  9  CurrentTime  QTime("10:31:01.503")
     IndexColum =  16  IndexRow =  1  IndexRole =  10  CurrentTime  QTime("10:31:01.503")
     IndexColum =  16  IndexRow =  1  IndexRole =  1  CurrentTime  QTime("10:31:01.503")
     IndexColum =  16  IndexRow =  1  IndexRole =  0  CurrentTime  QTime("10:31:01.504")
     IndexColum =  16  IndexRow =  1  IndexRole =  8  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.504")
     IndexColum =  0  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.504")
     IndexColum =  1  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.504")
     IndexColum =  1  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.504")
     IndexColum =  1  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.504")
     IndexColum =  1  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.504")
     IndexColum =  1  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.505")
     IndexColum =  1  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.505")
     IndexColum =  1  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.505")
     IndexColum =  2  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.505")
     IndexColum =  3  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.505")
     IndexColum =  3  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.505")
     IndexColum =  3  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.505")
     IndexColum =  3  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.505")
     IndexColum =  3  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.506")
     IndexColum =  3  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.506")
     IndexColum =  3  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.506")
     IndexColum =  4  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.506")
     IndexColum =  5  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.506")
     IndexColum =  5  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.506")
     IndexColum =  5  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.507")
     IndexColum =  5  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.507")
     IndexColum =  5  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.507")
     IndexColum =  5  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.507")
     IndexColum =  5  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.507")
     IndexColum =  6  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.507")
     IndexColum =  7  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.508")
     IndexColum =  7  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.508")
     IndexColum =  7  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.508")
     IndexColum =  7  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.508")
     IndexColum =  7  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.508")
     IndexColum =  7  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.508")
     IndexColum =  7  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.508")
     IndexColum =  8  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.508")
     IndexColum =  9  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.509")
     IndexColum =  9  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.509")
     IndexColum =  9  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.509")
     IndexColum =  9  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.509")
     IndexColum =  9  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.509")
     IndexColum =  9  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.509")
     IndexColum =  9  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.509")
     IndexColum =  10  IndexRow =  2  IndexRole =  8  CurrentTime  QTime("10:31:01.510")
     IndexColum =  11  IndexRow =  2  IndexRole =  6  CurrentTime  QTime("10:31:01.510")
     IndexColum =  11  IndexRow =  2  IndexRole =  7  CurrentTime  QTime("10:31:01.510")
     IndexColum =  11  IndexRow =  2  IndexRole =  9  CurrentTime  QTime("10:31:01.510")
     IndexColum =  11  IndexRow =  2  IndexRole =  10  CurrentTime  QTime("10:31:01.510")
     IndexColum =  11  IndexRow =  2  IndexRole =  1  CurrentTime  QTime("10:31:01.510")
     IndexColum =  11  IndexRow =  2  IndexRole =  0  CurrentTime  QTime("10:31:01.510")
    
    


  • @JonexElectronic
    What would you like me to say about this? It is up to you to see what route of code it follows. However, all these calls together take a total of 1/10th of a second, so...? Unless you really are finding that too much, I wonder whether whatever "slow" you are talking about is somewhere else?


  • Lifetime Qt Champion

    @JonexElectronic There are profilers to analyze performance issues. See https://hackingcpp.com/cpp/tools/profilers.html



  • @JonB I'm sure that is the several times that data() is called, because It never stop of being called. And if I hide the QTableView everything works fine.



  • @jsulm thanks, I will show how to use it



  • @JonexElectronic said in QAbstractTableModel run data() several times even if there are no modifications:

    @JonB I'm sure that is the several times that data() is called, because It never stop of being called. And if I hide the QTableView everything works fine.

    Don't know what you mean. I never said data() was not called, I said it is called as you show, and seemingly takes 0.1 seconds.

    I do not believe "it never stop being called". Once the table has been drawn if you do not move the mouse or otherwise interact it should not be being called. Else you have something wrong in your code. Note that if you use the debugger and place breakpoints it may get called, because debugging causes the application to repeatedly gain & lose focus.



  • data() will be called anytime it needs to repaint (so passing the mouse over it probably triggers it). What you could do is use a QCache<quint64,QVariant> to store previous result and return them without fetching them again (the key would be something like: (static_cast<quint64>(index.column()) << 32) | static_cast<quint64>(index.row()))



  • @JonB No, it is done 10 times every 0.001 sec.
    QTime("10:31:01.419")
    QTime("hh:mm:sec.ms")
    Probably I have something wrong. Believe me, it is always being called .



  • @VRonin I'm not sure how to do that. Could you give me an example?



  • @JonexElectronic said in QAbstractTableModel run data() several times even if there are no modifications:

    @JonB No, it is done 10 times every 0.001 sec

    I don't know what you mean. You chose to show some QTime outputs, and they range from QTime("10:31:01.419") to QTime("10:31:01.510"), which is 0.1 seconds. If you meant anything other than that it is not shown. That's all I can say, and never mind.

    Probably I have something wrong. Believe me, it is always being called .

    I asked you to

    Once the table has been drawn if you do not move the mouse or otherwise interact it should not be being called.

    So let it draw. Take your hands of the keyboard and the mouse. Sit there and do nothing. Is data() still being called regularly, yes or no?



  • I took my hands off and It happend. Still being called.



  • @JonexElectronic
    Then it sounds like something else is going on, and you need to discover what.

    Why don't you start by commenting everything out in your data() and replacing it by, say:

    QVariant XfTableModelQlist::data(const QModelIndex &index, int role) const
    {
        qDebug()<<" IndexColum = "<< index.column() << " IndexRow = " << index.row() << " IndexRole = " << role;
        if (role==Qt::DisplayRole)
            return "Hello"
        return QVariant();
    }
    

    Does it still get called repeatedly now?



  • @JonB said in QAbstractTableModel run data() several times even if there are no modifications:

    QVariant XfTableModelQlist::data(const QModelIndex &index, int role) const
    {
    qDebug()<<" IndexColum = "<< index.column() << " IndexRow = " << index.row() << " IndexRole = " << role;
    if (role==Qt::DisplayRole)
    return "Hello"
    return QVariant();
    }

    Yes it is... My tableView is in a QDockWidget and share the windows with others QDockWidget in the same QMainWindow. It could be the problem?



  • @JonexElectronic
    That I would not know. Are you able perhaps to test it outside of a dock widget? But if something is constantly calling your data() method when you are not doing anything at all that is clearly a problem.



  • @JonB Yes, I have tried it and it does not happen again. Thanks, probably is something that emit a signal to repaint all de Dock? Is it
    posible??



  • @JonexElectronic said in QAbstractTableModel run data() several times even if there are no modifications:

    Thanks, probably is something that emit a signal to repaint all de Dock? Is it
    posible??

    Again, sorry, not my area. But if something calls for a repaint/update of a view onto your model you would indeed see the model's data() method being called many times.

    You need someone else to comment on your currently reported situation with data() being called repeatedly on your dock widget, as this needs not to be happening.


Log in to reply