Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: EhTemka от Июнь 19, 2007, 01:25



Название: Подкраска строки в таблице
Отправлено: EhTemka от Июнь 19, 2007, 01:25
Привет!

Qt 4.1.4

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

Хотелось бы чтобы цвет у выделенной строки и текущей был разный. С помощью QPalette я так понял этого добиться нельзя.
 Кроме того,  ни как не могу получить текущую строку при перемещении по таблице с помощью стрелок на клавиатуре (ну не такого сигнала), да и вообще нет сигнала оповещающего о том что данная строка(индех) текущая. А с помощью имеющихся сигналов (clicked и т.д) все как-то не очень.
 
   Может кто знает как решить эти две проблемки. Зарание спасибо


Название: Подкраска строки в таблице
Отправлено: J. Bond от Июнь 19, 2007, 11:22
setBackground для активного итема?

а для определения активного итема currentItem


Название: Подкраска строки в таблице
Отправлено: goer от Июнь 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 от Июнь 19, 2007, 21:17
ну тут я немного виноват, что не уточнил.  Таблица у меня от QTheeView.

А там нет таких сигналов, что не есть гуд.


Название: Подкраска строки в таблице
Отправлено: Racheengel от Июнь 19, 2007, 22:22
ммм делегат можно свой сделать...


Название: Подкраска строки в таблице
Отправлено: EhTemka от Июнь 20, 2007, 00:56
а разве в делегате можно отлавить currient index?


Название: Подкраска строки в таблице
Отправлено: SABROG от Июнь 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 от Июнь 20, 2007, 18:46
спасибо!