Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Agriop от Декабрь 06, 2005, 12:13



Название: Qt 4.0.1: Цвет ячеек в QAbstractTableModel
Отправлено: Agriop от Декабрь 06, 2005, 12:13
Пытаюсь сделать простейшую таблицу в Qt 4.0.1, мне нужно, чтобы ячейки в виде закрашивались определенным цветом, но они почему-то не закрашиваются :(

Причем класс QTableWidget устанавливает цвет ячеек тоже через data/BackgroundColorRole, и использует QTableView и у него ячейки без проблем закрашиваются, а через QAbstractTableModel/QTableView не получается :(

Код:

class MyTable : public QAbstractTableModel {
public:
MyTable(QObject* parent = 0);
int columnCount(const QModelIndex &parent) const;
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
};

MyTable::MyTable(QObject* parent)
: QAbstractTableModel(parent) {
}

int MyTable::rowCount(const QModelIndex &parent = QModelIndex()) const {
return 30;
}

int MyTable::columnCount(const QModelIndex &parent = QModelIndex()) const {
return 30;
}

QVariant MyTable::data(const QModelIndex &index, int role) const {
if (role == Qt::DisplayRole)
return QVariant(2);    // some data
else if (role == Qt::BackgroundColorRole)
return QVariant(Qt::blue);

return QVariant();
}

int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyTable *model = new MyTable;
   
QTableView *table = new QTableView;
table->setModel(model);

table->show();
return app.exec();
}


Название: Qt 4.0.1: Цвет ячеек в QAbstractTableModel
Отправлено: Agriop от Декабрь 06, 2005, 14:50
Все, понял свою ошибку - Qt::blue - целое значение, в data() нужно возвращать QVariant(QColor(Qt::blue))


Название: Qt 4.0.1: Цвет ячеек в QAbstractTableModel
Отправлено: nEoN от Декабрь 06, 2005, 17:55
Кстати QVariant(..) писать не обязательно, можно просто return QColor(Qt::blue).
Помоему так нагляднее.


Название: Qt 4.0.1: Цвет ячеек в QAbstractTableModel
Отправлено: Agriop от Декабрь 06, 2005, 23:36
Цитата: "nEoN"
Кстати QVariant(..) писать не обязательно, можно просто return QColor(Qt::blue).
Помоему так нагляднее.

Согласен, не знал, хотя теперь буду осторожнее работать с классом QVariant.

Еще мне нужно, чтобы горизонтальный заголовок таблицы был на три строки, причем с объединением ячеек, насколько я понимаю, это так просто не сделаешь.


Название: Qt 4.0.1: Цвет ячеек в QAbstractTableModel
Отправлено: nEoN от Декабрь 07, 2005, 09:33
Цитата: "Agriop"

Еще мне нужно, чтобы горизонтальный заголовок таблицы был на три строки, причем с объединением ячеек, насколько я понимаю, это так просто не сделаешь.


Да, по простому это не сделаешь.
Как вариант можно унаследоваться от QHeaderView, реализовывать в нём "многострочность" и объединение ячеек заголовка. А потом tableView->setHorizontalHeader(...).


Название: Qt 4.0.1: Цвет ячеек в QAbstractTableModel
Отправлено: Agriop от Декабрь 07, 2005, 12:16
Еще оказывается есть хитрый класс Q3Table.