Geschwindigkeit Model/View Optimieren
Verfasst: 24. Februar 2009 16:48
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
Test.cpp
Hoffe der ein oder andere kann mir da weiterhelfen.
Schonmal danke im Vorraus.
mfg. Marco
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;
};
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();
}
Schonmal danke im Vorraus.
mfg. Marco