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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget и разноцветные строчки  (Прочитано 3600 раз)
votan
Гость
« : Июль 01, 2009, 17:32 »

Здраствуйте, подскажите пожалуйста как можно отрисовать строки разного цвета в QTableWidget, так что бы основной фон виджета остался не тронутым.
я пробывал так
 
Код
C++ (Qt)
 
MyTable = new QTableWidget;
MyTable->setAlternatingRowColors(true);
QPalette pal;
pal.setColor(QPalette::AlternateBase,QColor(Qt::red));
pal.setColor(QPalette::Base,Qt::red);
MyTable->setPalette(pal);

pal.setColor(QPalette::Base,Qt::red); // красит задний фон и портит всю малину, затем попробывал со стандартным примером из Qt

Код
C++ (Qt)
void TableStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,
                                QPainter *painter, const QWidget *widget) const
{
 
       switch (element) {
        case (PE_PanelItemViewItem): {
           painter->save();
 
            QPoint topLeft = option->rect.topLeft();
            QPoint bottomRight = option->rect.topRight();
            QLinearGradient backgroundGradient(topLeft, bottomRight);
 
            if((table->rowCount())%2==0){
            backgroundGradient.setColorAt(0.0, QColor(Qt::red).lighter(190));
            backgroundGradient.setColorAt(1.0, Qt::magenta);
            painter->fillRect(option->rect, QBrush(backgroundGradient));
            qDebug()<<"YRLY "<<widget->rect()<<" "<<option->rect;
            painter->restore();
          }
          else
            {
            backgroundGradient.setColorAt(0.0, QColor(Qt::green).lighter(190));
            backgroundGradient.setColorAt(1.0, Qt::blue);
            painter->fillRect(QRect(table->rect()), QBrush(backgroundGradient));
            qDebug()<<"DONT "<<widget->rect()<<" "<<option->rect;
            painter->restore();
             }
 
        break;
        }
        default:
            QWindowsStyle::drawPrimitive(element, option, painter, widget);
    }
}

в этом же варианте происходит полная перерисовка таблицы под один стиль при добавлении новой строки(первая строка красится в красный цвет, вторая же закрашивает первую и себя в синий, 3я закрашивает 1ю 2ю и себя в красный, при удалении происходит эффект, как будто мы удаляем слои и с каждыйм новым слоем открывается тот который закрасили)

вот такая вот проблема

Записан
Rcus
Гость
« Ответ #1 : Июль 01, 2009, 17:52 »

setData(Qt::BackgroundRole,color) не подходит?
Записан
votan
Гость
« Ответ #2 : Июль 01, 2009, 18:20 »

спасибо, вроде заработало   Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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