Seite 1 von 1

QTableView verwenden ohne SQL

Verfasst: 18. April 2011 20:40
von saoirse
Hi,

ich möchte gern eine Tabelle (ähnlich einem Listcontrol in Bericht-Ansicht) erstellen, in der einfach ein paar Daten dargestellt werden sollen. Dabei soll keine Datenbank zum Einsatz kommen. Der Zugriff auf die einzelnen Datenfelder (columns / rows) muss schnell und einfach erfolgen können, da die Daten durch das Programm (nicht durch den User) geändert werden mnüssen.

Die QTableView sieht eigentlich ganz gut aus, aber leider bekomme ich nichts angezeigt. Mittels QT-Designer hab ich ein QTableView item erstellt.

Code: Alles auswählen

class WizardDialog : public QDialog
{
	Q_OBJECT

public:
	WizardDialog(QWidget *parent = 0);
	~WizardDialog();

private slots:
	void testklick(); 

private:
	Ui::WizardDialog ui;
};



WizardDialog::WizardDialog(QWidget *parent)
	: QDialog(parent)
{ 
     ui.setupUi(this);
     
     QSqlTableModel *model = new QSqlTableModel(this);
     model->setTable(tableName);
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();

     model->setHeaderData(0, Qt::Horizontal, tr("ID"));
     model->setHeaderData(1, Qt::Horizontal, tr("First name"));
     model->setHeaderData(2, Qt::Horizontal, tr("Last name"));

      ui.tableview->setModel(model); 
}
Muss ich über das setModel gehen, um überhaupt Daten darstellen zu können? Gibt es ein einfacheres Widget, um das gleiche zu erreichen?

Gruß
saoirse

Verfasst: 18. April 2011 20:57
von upsala
QTableWidget, oder war das jetzt zu einfach?

Widget oder View

Verfasst: 18. April 2011 22:48
von softwaremaker
Es kommt darauf an, wieviele Daten angezeigt werden sollen.
Nur ein paar, dann nimm QTableWidget und für jeden Eintrag erzeugst du ein QTableWidgetItem (ohne Model).

Sind es sehr viele Daten (oder Bilder) dann nehme QTableView mit einem Model (z.b. von QAbstractTableModel ableiten):

Code: Alles auswählen

class MyTableModel : public QAbstractTableModel
{
    Q_OBJECT

public:
    MyTableModel ();

    int rowCount ( const QModelIndex & parent = QModelIndex() ) const;
    int columnCount ( const QModelIndex & parent = QModelIndex() ) const;
    QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const;
    QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;

};
Die 4 Funktionen musst du mit Leben füllen (Daten bereitstellen), schaue in die Doku/Beispiele.

Verfasst: 19. April 2011 19:59
von padreigh
Oder nutz QWasAuchImmerView mit QStandardItemModel und füll es mit QStandardItems :) brauchste nix ableiten und das bietet imho gleich ein wenig Zeug zwecks sortieren usw. was du sonst über ein QSortFilterProxyModel zwischenschalten musst ...