[Qt-interest] Show QTableView is a very slow?
Alexandre Beraud
aberaud at infflux.com
Tue Feb 3 16:47:22 CET 2009
Hi again,
The data() method is evaluated for every cell that needs to be redrawn,
thus it is better if it does not do too many calculations. Do you use
the contains() method on QLists ? If so, then it may be very slow, and
I'd advise to convert your QLists to QSets(outside the data() method)
and use the contains() method on those QSets instead.
Regards,
Alex
SALOMEHER at terra.es a écrit :
> I have a class
>
> class MiTabla: public QTableView
>
> MiTabla(QWidget *parent):QTableView(parent) { ... }
> void mousePressEvent(QMouseEvent *event) { ... }
> void keyPressEvent(QKeyEvent *event) { ... }
>
> I then in my code initializes
>
> MiTabla *view = new MiTabla(principal);
> view->setGeometry(1, 0, principal->width()-1, PanLeyenda->y()-2));
> TablaModelI *model = new TablaModelI(0, MatrizMicroDatosS, listaH,
> listaV);
> view->setModel(model);
>
> MatrizMicroDatosS is QString **
> listaH and listaV is QStringList
> TablaModelI is class TablaModelI: public QAbstractTableModel
>
> TablaModelI::TablaModelI(QObject *parent, QString ** &vec, QStringList
> &cabecH, QStringList &cabecV):QAbstractTableModel(parent)
> {
> distances = vec;
> cabeceraH = cabecH;
> cabeceraV = cabecV;
> }
>
> where I in
> QVariant data(const QModelIndex &index, int role) { ... }
> I paint each cell of a different color depending on the value you
> have.
>
> QVariant TablaModelI::data(const QModelIndex &index, int role) const
> {
> if (!index.isValid())
> return QVariant();
>
> if (role == Qt::TextAlignmentRole)
> return int(Qt::AlignCenter);
>
> if (role == Qt::DisplayRole)
> return distances[index.row()][index.column()];
>
> if (role == Qt::BackgroundRole) {
> QColor color;
> if (index.column() == 0)
> return QColor(Qt::green);
>
> if (ConjuntoRegistrosExcluidos.contains(index.row())) {
> color = Qt::red;
> color.setRgb(255, 144, 16);
> color.setHsv (32, 239, 255);
> return QColor(color);
> }
>
> if (VectorExclusionVariables[index.column()-1]) {
> color = Qt::red;
> color.setRgb(255, 144, 16);
> color.setHsv (32, 239, 255);
> return QColor(color);
> }
>
> if (ConjuntoRegistrosIncorrectos.contains(index.row())) {
> if ((VariablesAImputar[index.row()].contains(index.column()
> -1)) && (!FmeVariablesAsociadas->EsVariableImputable(index.column()
> -1)))
> return QColor(Qt::magenta);
> return QColor(Qt::red);
> }
>
> if (MatrizImputacion[index.row()][index.column()-1]) return
> QColor(Qt::yellow);
>
> if (ConjuntoRegistrosDonantes.contains(index.row())) {
> color = Qt::cyan;
> color.setRgb(87, 205, 255);
> color.setHsv (198, 168, 255);
> return QColor(color);
> }else return QColor(Qt::white);
> }
>
> return QVariant();
> }
>
>
> Could this be the reason why so late?
>
>
> ----Mensaje original----
> De: aberaud at infflux.com
> Recibido: 03/02/2009 15:32
> Para: <qt-interest at trolltech.com>
> Asunto: Re: [Qt-interest] Show QTableView is a very slow?
>
> Hi,
>
> We can't give you any answer without some more information. Did you
> derive the QTableView class ? Do you have big calculations in its
> showEvent() ? Do you use a QItemDelegate with a heavy paintEvent() ?
> Did
> you connect the
> tab change to one or several slots ?
>
> Regards,
>
> Alex
>
>
> SALOMEHER at terra.es a écrit :
>
>> Hi,
>> I have an application that displays a number of Tab of a
>>
> QTabWidget.
>
>> Each Tab has a QTableView whose model is a huge matrix. When I go on
>>
> a
>
>> Tab to display this takes a lot, why is this so? may be because the
>> view has many colors?
>>
>> Regards.
>>
>>
>> *Ahora también puedes acceder a tu correo Terra desde el móvil.*
>> *Infórmate pinchando*** aquí.**
>> <http://ad.doubleclick.net/clk;77451406;6134080;d?http://www.correo.
>>
> movistar.es/do/isp/assistant/login?isp=terra>
>
> ------------------------------------------------------------------------
>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>
>>
>
>
>
--
BERAUD Alexandre
Ingénieur Développement
Infflux - Informatique & Flux
Tel: 01 49 57 92 00 - Fax : 01 49 57 92 01
Mail: aberaud at infflux.com
Visitez notre site : www.infflux.com
More information about the Qt-interest-old
mailing list