Seite 1 von 1

[gelöst]Variable an QSqlTableModel-Subklasse übergeben (Qt4)

Verfasst: 5. Dezember 2012 11:53
von seppl
Liebes Forum,
ich habe folgende Klasse, um die Spalte "preis" einer SQL-Tabelle rechtsbündig darzustellen:

Code: Alles auswählen

class RightAlignTableModel : public QSqlTableModel
{
  Q_OBJECT
public:
QVariant data(const QModelIndex &index, int role)const
{
QString rechts="preis";

if (role==Qt::TextAlignmentRole)  {
if (QSqlTableModel::fieldIndex(""+ rechts +"")== index.column()) {
int flag = Qt::AlignRight|Qt::AlignVCenter; return flag; } 
}
else   return QSqlTableModel::data(index, role);}
};
Und die Funktion, um die Tabelle auf die GUI zu stellen:

Code: Alles auswählen

void MainWindow::waren () {
RightAlignTableModel *model = new RightAlignTableModel;
model->setTable("waren");
model->select();

view = new QTableView(this);
view->setModel(model);
view->setGeometry(1,70,1049,467);
view->show();
}
So klappt es auch. Aber ich möchte von der Funktion "void MainWindow::waren"aus die Variable "QString rechts" der Klasse "RightAlignTableModel" bekanntgeben, da ja jede Tabelle andere Spaltennamen hat.

Hat jemand eine Idee?

Re: Variable an QSqlTableModel-Subklasse übergeben (Qt4)

Verfasst: 5. Dezember 2012 17:37
von Christian81
Du möchtest 'rechts' an RightAlignTableModel übergeben? Warum machst Du es nicht einfach im ctor oder als separate Funktion?

Re: Variable an QSqlTableModel-Subklasse übergeben (Qt4)

Verfasst: 5. Dezember 2012 18:52
von seppl
Genau Christian81, ich möchte 'rechts' an RightAlignTableModel übergeben. Mit separaten Funktionen habe ich es nach ..zig Stunden ausprobieren nicht hingekriegt. Ctor kenne ich nocht nicht, werde micht mal darüber schlau machen, bin sehr gespannt, was man damit kann.

Danke für den Tipp!

Re: Variable an QSqlTableModel-Subklasse übergeben (Qt4)

Verfasst: 6. Dezember 2012 10:01
von seppl
Jetzt gehr mir ein Licht auf! ctor heißt Constructor (Mein Bruder würde jetzt sagen "Guten Morgen, Frau Holle"). Werde es mal ausprobieren. Ich hoffe, es klappt, wie ich will.

Re: [gelöst]Variable an QSqlTableModel-Subklasse übergeben (

Verfasst: 6. Dezember 2012 22:46
von seppl
OK... 'rechts' an RightAlignTableModel im ctor übergeben. Das wäre dann das, oder?

Code: Alles auswählen

QVariant data(const QModelIndex &index, int role,   Q S t r i n g   r e c h t s)const
Dann moniert der Compiler:
rightaligntablemodel.h:57: error: declaration of ‘QString col’ shadows a parameter
rightaligntablemodel.h:57: At global scope:
rightaligntablemodel.h:57: warning: unused parameter ‘col’

Re: Variable an QSqlTableModel-Subklasse übergeben (Qt4)

Verfasst: 7. Dezember 2012 06:41
von Christian81
Sorry aber nimm bitte ein C++ Buch und lies Dir die ersten hundert Seiten durch... so kann das nichts werden auch wenn wir Dir sagen wie Du es machen könntest...

Re: Variable an QSqlTableModel-Subklasse übergeben (Qt4)

Verfasst: 11. Januar 2013 17:11
von seppl
Melde mich, nachdem ich meine C++ Kenntnisse vertieft, viel gegrübelt und experimentiert habe, nun mit der Lösung zurück:

Code: Alles auswählen

class RightAlignTableModel : public QSqlTableModel
{
  Q_OBJECT
public:
TableModel(QObject *) {};  // Das hat noch gefehlt (ctor?)

QString rechts; // Zu übergebende Variable

QVariant data(const QModelIndex &index, int role)const
{
if (role==Qt::TextAlignmentRole)  {
if (QSqlTableModel::fieldIndex(""+ rechts +"")== index.column()) {
int flag = Qt::AlignRight|Qt::AlignVCenter; return flag; } 
}
else   return QSqlTableModel::data(index, role);}
};
in der Funktion, die die Klasse aufruft, wird dann die Variable zugewiesen:

Code: Alles auswählen

void MainWindow::waren () {
RightAlignTableModel *model = new RightAlignTableModel;
model->setTable("waren");
model->rechts="preis";  // Zu übergebende Variable wird zugewiesen
model->select();

view = new QTableView(this);
...
Hätte es wirklich so viel Umstände gemacht, mir diese Kleinigkeit zu verraten?
Bin jetzt dabei, die Klasse dann noch mit einer Funktion auszubauen, damit mehrere Variablen( Spaltennamen) als Parameter übergeben werden können. Die Funktion heißt - nach Qt-Manier - "setRechts", in Klammer und Anführungszeichen stehen dann die Parameter, wie z. B. bei "setTable", also z. B.:
model->setRechts("einkaufspreis","verkaufspreis","alterpreis","neuerpreis","...","...","...","...");
So bekommt dann der Code ein einheitliches Bild.