Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Astrologer от Октябрь 26, 2010, 10:22



Название: Выделение ячейки QTableView цветом
Отправлено: Astrologer от Октябрь 26, 2010, 10:22
Всем привет.  Как выделить определенную ячейку/ки QTableView, скажем, красным цветом? Заранее спасибо.


Название: Re: Выделение ячейки QTableView цветом
Отправлено: GreatSnake от Октябрь 26, 2010, 10:31
Код
C++ (Qt)
QAbstractItemModel* m = table->model();
m->setData( m->index( row, col ), QBrush( Qt::red ), Qt::BackgroundRole );
 


Название: Re: Выделение ячейки QTableView цветом
Отправлено: Astrologer от Октябрь 26, 2010, 10:50
Спасибо. Но почему то не работает.
Код
C++ (Qt)
void QDbfReader::fullSearch()
{
   QAbstractItemModel* m = view->model();
   for (int i=0; i < view->model()->rowCount(); ++i)
   {
       for (int j = 0; j < view->model()->columnCount();++j)
       {
           m->setData( m->index( i, j ), QBrush( Qt::red ), Qt::BackgroundRole );
       }
   }
 
   view->setModel(m);
}
 


Название: Re: Выделение ячейки QTableView цветом
Отправлено: GreatSnake от Октябрь 26, 2010, 11:08
Должно работать. Копайте дальше...


Название: Re: Выделение ячейки QTableView цветом
Отправлено: Пантер от Октябрь 26, 2010, 11:28
view->setModel(m); - зачем??? Ведь QAbstractItemModel* m = view->model();
Модель самописная?


Название: Re: Выделение ячейки QTableView цветом
Отправлено: Astrologer от Октябрь 26, 2010, 11:29
Без этой строки тоже не работает. Модель - QSqlQueryModel.


Название: Re: Выделение ячейки QTableView цветом
Отправлено: Пантер от Октябрь 26, 2010, 11:36
Гык. А ты уверен, что можешь вносить изменения в QSqlQueryModel? ;)


Название: Re: Выделение ячейки QTableView цветом
Отправлено: GreatSnake от Октябрь 26, 2010, 11:42
Цитировать
Модель - QSqlQueryModel.
Ну дык, надо было сразу про это говорить.

Цитировать
The QSqlQueryModel model is read-only by default. To make it read-write, you must subclass it and reimplement setData() and flags(). Another option is to use QSqlTableModel, which provides a read-write model based on a single database table.


Название: Re: Выделение ячейки QTableView цветом
Отправлено: Astrologer от Октябрь 27, 2010, 11:31
Спасибо. Пока от этой идеи отказался, ибо не нужно стало.


Название: Re: Выделение ячейки QTableView цветом
Отправлено: kowsan от Октябрь 27, 2010, 13:43
Не работает. В чем может быть дело?
Код:
    reqModel->setTable("activationrequest");
    reqModel->setSort(ui->reqView->horizontalHeader()->sortIndicatorSection(),ui->reqView->horizontalHeader()->sortIndicatorOrder());
    reqModel->select();
    requestsAllFilterModel->setSourceModel(reqModel);
    requestsAllFilterModel->setFilterKeyColumn(-1);
    ui->reqView->setModel(requestsAllFilterModel);
    QAbstractItemModel* m = ui->reqView->model();

    if (!m->setData( m->index( 1, 1 ), QBrush( Qt::red ), Qt::BackgroundRole )){
        qDebug ()<<"Background nod set";
    }


Код:
QSqlTableModel *reqModel;


Название: Re: Выделение ячейки QTableView цветом
Отправлено: nitro2005 от Октябрь 27, 2010, 14:16
Для оформления лучше установить QItemDelegate, например:
Код:
class MyItemDelegate : public QItemDelegate
{
  Q_OBJECT

public:
  MyItemDelegate(QObject *parent=0): QItemDelegate(parent)
  {
  }

  void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};

void MyItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  QStyleOptionViewItem o = option;
  if (index.column() == 0)
    o.font.setBold(true);
  QItemDelegate::paint(painter,o,index);
}

...
tableView->setItemDelegate(new MyItemDelegate(tableView));
или
setItemDelegateForColumn() вроде тоже есть.
...


Название: Re: Выделение ячейки QTableView цветом
Отправлено: GreatSnake от Октябрь 27, 2010, 14:19
Цитировать
Для оформления лучше установить QItemDelegate
kowsan это не поможет, т.к. у него не отрабатывает установка цвета ячейки.


Название: Re: Выделение ячейки QTableView цветом
Отправлено: nitro2005 от Октябрь 27, 2010, 14:23
Цитировать
Для оформления лучше установить QItemDelegate
kowsan это не поможет, т.к. у него не отрабатывает установка цвета ячейки.

Ничто не мешает закрасить ее в QItemDelegate::paint() :-) Извращение, конечно, но работает всегда. :)


Название: Re: Выделение ячейки QTableView цветом
Отправлено: GreatSnake от Октябрь 27, 2010, 14:28
Цитировать
Ничто не мешает закрасить ее в QItemDelegate::paint() :-) Извращение, конечно, но работает всегда.
Согласен. И это единственное решение для read-only модели. В данном случае это будет workaround)


Название: Re: Выделение ячейки QTableView цветом
Отправлено: kowsan от Октябрь 27, 2010, 14:34
У меня вроде не RO модель
Цитировать
The QSqlQueryModel model is read-only by default. To make it read-write, you must subclass it and reimplement setData() and flags(). Another option is to use QSqlTableModel, which provides a read-write model based on a single database table.


Название: Re: Выделение ячейки QTableView цветом
Отправлено: nitro2005 от Октябрь 27, 2010, 14:45
У меня вроде не RO модель

requestsAllFilterModel - это прокси-модель скорее всего. Не знаю, дает ли она делать setData для QSqlTableModel. Последняя скорее всего RO.