Geschwindigkeit Model/View Optimieren

Alles rund um die Programmierung mit Qt
Antworten
MBex
Beiträge: 17
Registriert: 24. November 2007 11:36

Geschwindigkeit Model/View Optimieren

Beitrag von MBex »

Hallo zusammen,

ich arbeite zurzeit an einem Grid, das Daten aus einer Datenbank darstellen soll. Zum testen der Performance habe ich eine kleines Programm geschrieben und leider feststellen müssen, dass schon bei 200 Zeilen und etwa 37 Spalten die ganze Application langsamer wird und zudem die Mehrfachselection von Zellen nur mit Ruckeln möglich ist.
Nun meine Frage an euch, ob es irgend eine Möglichkeit gibt das Beispielprogramm performanter zu gestalten. Wo ich das Problem sehe ist, dass durch die verminderte Zeilenhöhe immer relativ viele Zellen durch das View aktuallisiert werden müssen. Jedoch kann ich mir nicht vorstellen, dass es da keinen Weg gibt etwas zu verbesser.

Nun mal der Code:

Test.h

Code: Alles auswählen

class Model: public QAbstractTableModel
{
   Q_OBJECT
   public:
      Model();
      virtual int rowCount(   const QModelIndex &parent) const;
      virtual int columnCount(const QModelIndex &parent) const;
      virtual QVariant data(  const QModelIndex &index, int role) const;
      QVariant headerData(
         int section, 
         Qt::Orientation orientation, 
         int role) const;
};

class Window: public QMainWindow 
{
   Q_OBJECT
   public:
      Window(QWidget *aParent = 0);
   private:
      QTableView m_view;
      Model m_model;
};
Test.cpp

Code: Alles auswählen

// 
//-----------------------------------------------------------------------------
Window::Window(QWidget *aParent):
   QMainWindow(aParent),
   m_view(this)
{
   setCentralWidget(&m_view);
   m_view.setModel(&m_model);
   m_view.verticalHeader()->setDefaultSectionSize(17);
}


// 
//-----------------------------------------------------------------------------
Model::Model()
{
}

// 
//-----------------------------------------------------------------------------
int Model::rowCount(const QModelIndex &parent) const
{
   return 200;
}

// 
//-----------------------------------------------------------------------------
int Model::columnCount(const QModelIndex &parent) const
{
   return 37;
}

// 
//-----------------------------------------------------------------------------
QVariant Model::data(const QModelIndex &index, int role) const
{
   if (role == Qt::DisplayRole)
   {
      return QVariant(QString("%1, %2 esfgsdgsdgsdgsdg")
         .arg(index.row())
         .arg(index.column()));
   }
   return QVariant();
}

// 
//-----------------------------------------------------------------------------
QVariant Model::headerData(
   int section, 
   Qt::Orientation orientation, 
   int role) const
{
   if (section < 37)
      return QVariant(QString("Spalte: %1").arg(section));
   else
      return QVariant();
}
Hoffe der ein oder andere kann mir da weiterhelfen.
Schonmal danke im Vorraus.

mfg. Marco
Antworten