tableView auf Daten einer versteckten Spalte zugreifen
Verfasst: 2. Oktober 2018 13:45
Hi,
ich bin noch recht neu in Qt und c++.
Icb habe eine Datenbank in einem .h File erstellt und möchte dise mithilfe einer TableView anzeigen.
Dies klappt auch soweit.
Nun habe ich meine Datenbank um eine Spalte erweitert. Diese enthäht die Farbinformation für den Hintergrund für die einzelnen Zeilen.
Diese Information möchte ich allerdings nur auslesen aber nicht anzeigen und genau hier ist mein Problem. Sobald ich diese Spalte verberge kann ich nicht mehr darauf zugreifen.
Gibt es eine Möglichkeit trotz der Verbergung der Spalte auf die Daten zugreifen zu können?
Wenn ja wie?
Ein kurzes Beispiel würde mir am besten helfen.
Vielen Dank für die Hilfe
Liebe Grüße
ich bin noch recht neu in Qt und c++.
Icb habe eine Datenbank in einem .h File erstellt und möchte dise mithilfe einer TableView anzeigen.
Dies klappt auch soweit.
Nun habe ich meine Datenbank um eine Spalte erweitert. Diese enthäht die Farbinformation für den Hintergrund für die einzelnen Zeilen.
Diese Information möchte ich allerdings nur auslesen aber nicht anzeigen und genau hier ist mein Problem. Sobald ich diese Spalte verberge kann ich nicht mehr darauf zugreifen.
Gibt es eine Möglichkeit trotz der Verbergung der Spalte auf die Daten zugreifen zu können?
Wenn ja wie?
Ein kurzes Beispiel würde mir am besten helfen.
Code: Alles auswählen
#include <QtWidgets>
#include "QSqlQueryModel"
#include "tableanpassen.h"
Tableanpassen::Tableanpassen(QObject *parent)
: QSqlQueryModel(parent)
{
}
QVariant Tableanpassen::data(const QModelIndex &index, int role) const
{
bool static s_red = false;
bool static s_yellow = false;
bool static s_green = false;
bool static s_gray = false;
//Zentriert den Text in den Zellen
if(role == Qt::TextAlignmentRole)
{
return Qt::AlignCenter;
}
//setzt die gewünschte Hintergrundfarbe
if(role == Qt::BackgroundRole )
{
// abfrage welche Hintergrundfarbe benötigt wird
QString inhalt = index.data(Qt::DisplayRole).toString();
if ( inhalt == "red" )
{
s_red = true;
s_yellow = false;
s_green = false;
s_gray = false;
}
if (inhalt == "yellow")
{
s_red = false;
s_yellow = true;
s_green = false;
s_gray = false;
}
if (inhalt == "green")
{
s_red = false;
s_yellow = false;
s_green = true;
s_gray = false;
}
if (inhalt == "gray")
{
s_red = false;
s_yellow = false;
s_green = false;
s_gray = true;
}
// Hintergrund wie gewünscht färben
if (s_red == true)
{
QBrush Background(Qt::red);
return Background;
}
if (s_yellow == true)
{
QBrush Background(Qt::yellow);
return Background;
}
if (s_green == true)
{
QBrush Background(Qt::green);
return Background;
}
if (s_gray == true)
{
QBrush Background(Qt::gray);
return Background;
}
}
//setzt die Daten
return QSqlQueryModel::data(index, role);
}
Code: Alles auswählen
#include "test_screen.h"
#include "ui_test_screen.h"
#include "tableanpassen.h"
#include <QTableView>
#include "QHeaderView"
test_screen::test_screen(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::test_screen)
{
ui->setupUi(this);
//***************************************************
// -- TableView Werkzeug Wechsel Warnung
//***************************************************
mytableanpassen = new Tableanpassen(this);
mytableanpassen->setQuery("SELECT * FROM WekzeugWechselWarnung");
mytableanpassen->setHeaderData(1, Qt::Horizontal, tr("Werkzeug Nr."));
mytableanpassen->setHeaderData(2, Qt::Horizontal, tr("Zeit"));
ui->table_werkzeug_wechsel_warnung->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->table_werkzeug_wechsel_warnung->setModel(mytableanpassen);
// gewünschte Spalte wird nicht in der Tableview angezeigt
// Befehl mus nach dem "setModel" Befehl stehen!!!
ui->table_werkzeug_wechsel_warnung->setColumnHidden(0, true);
ui->table_werkzeug_wechsel_warnung->setColumnHidden(3, true);
ui->table_werkzeug_wechsel_warnung->setStyleSheet("QHeaderView::section { background-color:grey }");
Vielen Dank für die Hilfe
Liebe Grüße