Есть TableView заполняющаяся через QSqlQueryModel. В первой колонке boolean данные, ориентируясь на значение ячейки необходимо отрисовать в ней ту или иную иконку. Решил сделать через делегаты но не могу взять исходное значение.
Делегат:
Component {
id: favoriteDelegate
Item {
Rectangle {
id: rect
anchors.centerIn: parent
anchors.fill: parent
Text{
text: parent.parent.data[0].data[0].text
}
}
}
}
Таблица:
TableView {
id:tableView
TableViewColumn {
id:favcolumn
width: 40
role: "systems.favorites"
title: "Fav"
delegate: favoriteDelegate
}
model: myModel
}
Появляется исключение
depends on non-NOTIFYable properties
Видел реализацию делегатов в C++ но они все для виджетов, как применить их в Qml не совсем понимаю.
Так же пробовал переопределять в data():
QVariant ListModel::data(const QModelIndex & index, int role) const {
if ( role==FavRole && index.column() == 0) {
return QIcon("D:/Users/Downloads/ico.ico");
}
}
Но в ячейку подставляется текст:
Ваша проблема решается путем создания собственного класса, производного от QSqlQueryModel
в котором перегружена функция QVariant data(const QModelIndex &index, int role = Qt::DisplayRole)
Ниже проверенный пример, который работает.
Определение класса, в котором в перегружаете QVariant data()
class ModifyQSqlQueryModel : public QSqlQueryModel
{
public:
Q_OBJECT
//Пишите свой вариант этой функции
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
private:
//Это номер колонки, в которой сидит Ваше булевого поле, которое Вы анализируете
int MasterColumn;
public:
ModifyQSqlQueryModel(QObject * parent = Q_NULLPTR);
~ModifyQSqlQueryModel();
//С помощью этой функции Вы устанавливаете номер колонки с булевым значением
void SetMasterColumn(int coll) { MasterColumn=coll;} ;
};
Фрагмент переопределяемого метода
QVariant ModifyQSqlQueryModel::data(const QModelIndex &index, int role) const
{
//Ваши иконки, которые Вы хотите показывать в зависимости от значения булевого поля (В качестве примера я выбрал стандартные иконы "+"и "-"
QIcon icbY("C:/.../Icons/Add.png");
QIcon icbN("C:/.../Icons/Delete.png");
//Возвращаемое значение от базового класса по умолчанию
QVariant value = QSqlQueryModel::data(index, role);
switch (role)
{
case Qt::DecorationRole:
if (index.column() != MasterColumn) return value;
if (index.sibling(index.row(), MasterColumn).data().isNull()) return value;
if (index.sibling(index.row(), MasterColumn).data().toBool())
return icbY;
else
return icbN;
break;
default:
return value;
}
return value;
}
В таком виде все прекрасно работает. Это результат, который я получил. Если у Вас не работает мой пример, значит проблемы в Вашей реализации, а для этого нужен Ваш код.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В соревнованиях по хоккею участвует N командСколько существует вариантов распределения комплектов золотых, серебряных и бронзовых медалей,...
Я знаю что во всех почти других языка есть такой тип метода как int[] и я могу вернуть, массив который я передал
возникла необходимость создавать с помощью c++ матрицы 10 на 10 из нулей и единиц (всегда 25 единиц и 75 нулей в случайных позициях)При этом генерировать...
Прошу помочь реализовать сортировку очереди, реализованную на основе массиваСортировка может быть любой, интересно было бы посмотреть быструю...