TestBackground.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TestBackground
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
tablemodel.cpp
HEADERS += mainwindow.h \
tablemodel.h
tablemodel.h
#ifndef TABLEMODEL_H
#define TABLEMODEL_H
#include <QAbstractTableModel>
class TableModel : public QAbstractTableModel
{
Q_OBJECT
public:
TableModel(QObject *parent = 0);
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
private:
};
#endif
tablemodel.cpp
#include "tablemodel.h"
#include <QColor>
#include <QBrush>
#include <qDebug>
#include <QString>
TableModel::TableModel(QObject *parent)
: QAbstractTableModel(parent)
{
}
int TableModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 2;
}
int TableModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 2;
}
QVariant TableModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole)
{
if (index.column() == 0)
return QString("zhang san");
else if (index.column() == 1)
return QString("china");
}
if(role == Qt::BackgroundRole)
{
if (index.column() == 0)
return QVariant(QColor(Qt::green));
else if (index.column() == 1)
return QVariant(QColor(Qt::green));
}
return QVariant();
}
QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role == Qt::DisplayRole)
{
if (orientation == Qt::Horizontal) {
switch (section) {
case 0:
return tr("Name");
case 1:
return tr("Address");
default:
return QVariant();
}
}
}
if(role == Qt::ForegroundRole)
{
if (orientation == Qt::Horizontal)
{
switch (section)
{
case 0:
return QVariant(QColor(Qt::blue));
case 1:
return QVariant(QColor(Qt::blue));
default:
return QAbstractTableModel::headerData(section,orientation,role);
}
}
}
if(role ==Qt::BackgroundRole)
{
//if(orientation == Qt::Vertical)
if (orientation == Qt::Horizontal)
{
switch (section)
{
case 0:
qDebug() << "case 0";
return QBrush(QColor(Qt::red));
case 1:
qDebug() << "case 1";
return QVariant(QColor(Qt::red));
default:
qDebug() << "default";
return QAbstractTableModel::headerData(section,orientation,role);
}
}
}
return QVariant();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTableView>
#include <tablemodel.h>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
TableModel * table;
};
#endif
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
table = new TableModel(this);
QTableView *tableView = new QTableView;
tableView->setModel(table);
setCentralWidget(tableView);
}
MainWindow::~MainWindow()
{
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Setting background of HeadData for QTableView is doesn’t work. Is it a bug for Qt ?
My original post is here:
http://qt-project.org/forums/viewthread/28840/#129491
↧