2014-10-17 4 views
0

Я пытаюсь установить цвет строки с этим кодом, и он не работает.Qt цвет фона строки в ListStringModel

QColor dataColor =Qt::red; 
    row = seznamChyb->rowCount(); 
    seznamChyb->insertRows(row,1); 

    QModelIndex index = seznamChyb->index(row); 
    ui->listView->setCurrentIndex(index); 

    seznamChyb->setData(index,dataColor, Qt::BackgroundRole); 
    seznamChyb->setData(index,data); 

ответ

0

Я не уверен, что на самом деле тип seznamChyb и ListStringModel. Но для изменения цвета фона строки потребовалась реализация метода QAbstractItemModel::data().

Я пишу пример для этого вопроса, и он работает хорошо:

#include <QApplication> 
#include <QTableView> 
#include <QAbstractListModel> 

class StringListModel : public QAbstractListModel 
{ 
public: 
    StringListModel(const QStringList &strings, QObject *parent = 0) 
     : QAbstractListModel(parent), stringList(strings) {} 

    int rowCount(const QModelIndex &) const 
    { 
     return stringList.count(); 
    } 
    QVariant data(const QModelIndex &index, int role) const 
    { 
     if (role == Qt::DisplayRole) 
      return stringList.at(index.row()); 
     if (role == Qt::BackgroundColorRole && index.row() == 0) // Look this. 
      return QBrush(Qt::red); 
     else 
      return QVariant(); 
    } 

private: 
    QStringList stringList; 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QTableView tableView; 

    QStringList list; 
    list << "a" << "b" << "c"; 
    StringListModel model(list); 

    tableView.setModel(&model); 
    tableView.show(); 

    return a.exec(); 
} 

Пожалуйста, проверьте свою программу еще раз.

+0

Его действие не работает. – Daffy

+0

'seznamChyb-> insertRows (строка, 1);' ==> 'seznamChyb-> insertRows (строка, 0);' или 'seznamChyb-> index (row);' ==> 'seznamChyb-> index (row , 1); ' – pezy

+0

, если я меняю 0 на 1 или добавлю 1, он не пишет текст, а backgrout его белый снова – Daffy

Смежные вопросы