crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTableView (полупрозрачное выделение строки), Как сделать в QTableView полупрозрачное выделение текущей строки?
kexby
  опции профиля:
сообщение 26.12.2013, 13:15
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 25.11.2012
Пользователь №: 3607

Спасибо сказали: 0 раз(а)




Репутация:   0  


День добрый.

Как сделать в QTableView полупрозрачное выделение текущей строки?

Необходимость в таком выделении возникла после того как, обнаружил что цвет ячеек, получаемый из модели методом data() для роли Qt::BackgroundRole, напрочь перекрывается цветом выделения строки. А хочется видеть всяческие раскраски даже для текущей строки. А если в модели будет 1 строка (т.е. она же текущая), то вообще цвет подкраски никогда не отобразится.
Исправить ситуцию с помощью стилей не получилось (назвачение цвета выделения с прозрачностью 30%):
myTableView->setStyleSheet("QTableView::item {selection-color: black; selection-background-color: rgba(30, 144, 255, 30%);}");

Так же обнаружил, что выделение в QTreeView и только в стиле WindowsVista работает именно так как мне хотелось (через выделение виден цвет ячеек).
Очень хотелось бы добится аналогичного поведения при выделении в QTableView.
Скрины во вложениях.
Пример:
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QDialog* window = new QDialog(0);
    window->setAttribute(Qt::WA_DeleteOnClose);
    window->resize(350,250);
    QVBoxLayout* lw = new QVBoxLayout(window);

    QTableView* tbv = new QTableView(window);
    tbv->setAlternatingRowColors(true);
    tbv->setSelectionMode(QAbstractItemView::SingleSelection);
    tbv->setSelectionBehavior(QAbstractItemView::SelectRows);
    tbv->verticalHeader()->setDefaultSectionSize(20);
    tbv->horizontalHeader()->setStretchLastSection(false);

    tbv->setStyleSheet("QTableView::item {selection-color: black; selection-background-color: rgba(30, 144, 255, 100);}");  //DodgerBlue
    lw->addWidget(tbv);

    QTreeView* trv = new QTreeView(window);
    trv->setAlternatingRowColors(true);
    trv->setSelectionMode(QAbstractItemView::SingleSelection);
    trv->setSelectionBehavior(QAbstractItemView::SelectRows);
    trv->header()->setStretchLastSection(false);

    lw->addWidget(trv);

    QStandardItemModel* model = new QStandardItemModel(3,3,window);
    model->setData(model->index(0,0), QVariant("abc"));
    model->setData(model->index(1,0), QVariant("Abc"));
    model->setData(model->index(2,0), QVariant("ABC"));
    model->setData(model->index(0,1), QVariant(10));
    model->setData(model->index(1,1), QVariant(0));
    model->setData(model->index(2,1), QVariant(-10));
    model->setData(model->index(0,2), QVariant(true));
    model->setData(model->index(1,2), QVariant(false));
    model->setData(model->index(2,2), QVariant(true));

    model->setData(model->index(1,0), QVariant(QBrush(Qt::red)), Qt::BackgroundRole);
    model->setData(model->index(1,1), QVariant(QBrush(Qt::yellow)), Qt::BackgroundRole);
    model->setData(model->index(1,2), QVariant(QBrush(Qt::green)), Qt::BackgroundRole);

    tbv->setModel(model);
    trv->setModel(model);

    window->show();

    return app.exec();
}


P.S. Гуглил, но решения так и не нашел.
Использовал Qt 4.8.5.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.12.2013, 20:09
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


у меня в стиле ХП, поведение не отличается от стиля виндовс, т.е. полупрозрачности не наблюдается.
(Qt 4.7)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kexby
  опции профиля:
сообщение 28.12.2013, 8:00
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 25.11.2012
Пользователь №: 3607

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 26.12.2013, 20:09) *
у меня в стиле ХП, поведение не отличается от стиля виндовс, т.е. полупрозрачности не наблюдается.
(Qt 4.7)

А если в XP попробовать так:
    QTreeView* trv = new QTreeView(window);
    trv->setStyle(new QWindowsVistaStyle());
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.12.2013, 17:21
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kexby @ 28.12.2013, 10:00) *
QWindowsVistaStyle()
насколько я знаю, для того, чтобы этот стиль подхватился, нужна сама Виста. По крайней мере на Вин2к стиль ВинХП не подхватывался (фабрика нулевой указатель возвращает, а если проверку не делаешь, то программа упадёт)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.2.2025, 23:18