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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подкраска строки в таблице  (Прочитано 4843 раз)
EhTemka
Гость
« : Июнь 19, 2007, 01:25 »

Привет!

Qt 4.1.4

   Есть понимаете-ли таблица со всякими записями.

Хотелось бы чтобы цвет у выделенной строки и текущей был разный. С помощью QPalette я так понял этого добиться нельзя.
 Кроме того,  ни как не могу получить текущую строку при перемещении по таблице с помощью стрелок на клавиатуре (ну не такого сигнала), да и вообще нет сигнала оповещающего о том что данная строка(индех) текущая. А с помощью имеющихся сигналов (clicked и т.д) все как-то не очень.
 
   Может кто знает как решить эти две проблемки. Зарание спасибо
Записан
J. Bond
Гость
« Ответ #1 : Июнь 19, 2007, 11:22 »

setBackground для активного итема?

а для определения активного итема currentItem
Записан
goer
Гость
« Ответ #2 : Июнь 19, 2007, 17:02 »

Да можно покрасить таблицу через QPalette.  Не забудь только поставить setAutoFillBackground(true) для tableWidget, а то может быть невидно изменений цвета в палитре. Можешь посмотреть в примерах examples/widgets/syles они там делали цвет селекции зеленым.


по поводу отсутствия сигналов, да вот же они:

void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn )
void currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous )
Записан
EhTemka
Гость
« Ответ #3 : Июнь 19, 2007, 21:17 »

ну тут я немного виноват, что не уточнил.  Таблица у меня от QTheeView.

А там нет таких сигналов, что не есть гуд.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Июнь 19, 2007, 22:22 »

ммм делегат можно свой сделать...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
EhTemka
Гость
« Ответ #5 : Июнь 20, 2007, 00:56 »

а разве в делегате можно отлавить currient index?
Записан
SABROG
Гость
« Ответ #6 : Июнь 20, 2007, 08:05 »

Из Assistant'a:

Код:

void QItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const   [virtual]
Renders the delegate using the given painter and style option for the item specified by index.
When reimplementing this function in a subclass, you should update the area held by the option's rect variable, using the option's state variable to determine the state of the item to be displayed, and adjust the way it is painted accordingly.
For example, a selected item may need to be displayed differently to unselected items, as shown in the following code:
     if (option.state & QStyle::State_Selected)
         painter->fillRect(option.rect, option.palette.highlight());

     int size = qMin(option.rect.width(), option.rect.height());
     int brightness = index.model()->data(index, Qt::DisplayRole).toInt();
     double radius = (size/2.0) - (brightness/255.0 * size/2.0);
     if (radius == 0.0)
         return;

     painter->save();
     painter->setRenderHint(QPainter::Antialiasing, true);
     painter->setPen(Qt::NoPen);
     if (option.state & QStyle::State_Selected)
         painter->setBrush(option.palette.highlightedText());
     else
     ...


Т.е. делегат, переопределение paint + проверка флагов
Записан
EhTemka
Гость
« Ответ #7 : Июнь 20, 2007, 18:46 »

спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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