Russian Qt Forum
Сентябрь 30, 2024, 16:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Выделение ячейки QTableView цветом  (Прочитано 16249 раз)
Astrologer
Гость
« : Октябрь 26, 2010, 10:22 »

Всем привет.  Как выделить определенную ячейку/ки QTableView, скажем, красным цветом? Заранее спасибо.
« Последнее редактирование: Октябрь 26, 2010, 10:27 от Astrologer » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 26, 2010, 10:31 »

Код
C++ (Qt)
QAbstractItemModel* m = table->model();
m->setData( m->index( row, col ), QBrush( Qt::red ), Qt::BackgroundRole );
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Astrologer
Гость
« Ответ #2 : Октябрь 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);
}
 
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 26, 2010, 11:08 »

Должно работать. Копайте дальше...
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Октябрь 26, 2010, 11:28 »

view->setModel(m); - зачем??? Ведь QAbstractItemModel* m = view->model();
Модель самописная?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Astrologer
Гость
« Ответ #5 : Октябрь 26, 2010, 11:29 »

Без этой строки тоже не работает. Модель - QSqlQueryModel.
« Последнее редактирование: Октябрь 26, 2010, 11:34 от Astrologer » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Октябрь 26, 2010, 11:36 »

Гык. А ты уверен, что можешь вносить изменения в QSqlQueryModel? Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Октябрь 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.
Записан

Qt 5.11/4.8.7 (X11/Win)
Astrologer
Гость
« Ответ #8 : Октябрь 27, 2010, 11:31 »

Спасибо. Пока от этой идеи отказался, ибо не нужно стало.
Записан
kowsan
Гость
« Ответ #9 : Октябрь 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;
Записан
nitro2005
Гость
« Ответ #10 : Октябрь 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() вроде тоже есть.
...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Октябрь 27, 2010, 14:19 »

Цитировать
Для оформления лучше установить QItemDelegate
kowsan это не поможет, т.к. у него не отрабатывает установка цвета ячейки.
Записан

Qt 5.11/4.8.7 (X11/Win)
nitro2005
Гость
« Ответ #12 : Октябрь 27, 2010, 14:23 »

Цитировать
Для оформления лучше установить QItemDelegate
kowsan это не поможет, т.к. у него не отрабатывает установка цвета ячейки.

Ничто не мешает закрасить ее в QItemDelegate::paint() :-) Извращение, конечно, но работает всегда. Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Октябрь 27, 2010, 14:28 »

Цитировать
Ничто не мешает закрасить ее в QItemDelegate::paint() :-) Извращение, конечно, но работает всегда.
Согласен. И это единственное решение для read-only модели. В данном случае это будет workaround)
Записан

Qt 5.11/4.8.7 (X11/Win)
kowsan
Гость
« Ответ #14 : Октябрь 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.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.212 секунд. Запросов: 23.