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

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
seppl
Beiträge: 6
Registriert: 4. November 2012 12:26
Wohnort: Speyer

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

Beitrag 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?
Zuletzt geändert von seppl am 11. Januar 2013 20:34, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von Christian81 »

Du möchtest 'rechts' an RightAlignTableModel übergeben? Warum machst Du es nicht einfach im ctor oder als separate Funktion?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
seppl
Beiträge: 6
Registriert: 4. November 2012 12:26
Wohnort: Speyer

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

Beitrag 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!
seppl
Beiträge: 6
Registriert: 4. November 2012 12:26
Wohnort: Speyer

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

Beitrag 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.
seppl
Beiträge: 6
Registriert: 4. November 2012 12:26
Wohnort: Speyer

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

Beitrag 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’
Zuletzt geändert von seppl am 11. Januar 2013 20:36, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
seppl
Beiträge: 6
Registriert: 4. November 2012 12:26
Wohnort: Speyer

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

Beitrag 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.
Antworten