Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Natalie от Февраля 21, 2006, 13:48



Название: Выделение иконки в QListWidget
Отправлено: Natalie от Февраля 21, 2006, 13:48
При выделении item-а в QListWidget backdround иконки остается белым.
Получается как-то некрасиво когда надпись подсвечивается синим, а иконка нет. Такое  ощущение, что иконка вообще отдельно от item-а.

Как сделать, чтобы background иконки при выделении item-а также становился бы cиним?
Может есть какое-то стандартное средство?

Help, pleeeease!!!!


Название: Выделение иконки в QListWidget
Отправлено: nEoN от Февраля 21, 2006, 14:12
Чтобы фон иконки менялся нужно сделать его прозрачным, а не белым.
Я бы порекомендовал использовать картинки в формате PNG, они поддерживают прозрачность.


Название: Выделение иконки в QListWidget
Отправлено: Natalie от Февраля 21, 2006, 14:53
Так фон должен быть прозрачным у самой иконки или прозрачность задавать программно? Если программно, то как?


Название: Выделение иконки в QListWidget
Отправлено: nEoN от Февраля 21, 2006, 15:06
Лучше всего изначально делать иконки с прозрачным фоном.
Можно и програмно делать прозрачность через наложение маски, но в данном случае по моему лучше использовать первый вариант.


Название: Выделение иконки в QListWidget
Отправлено: burunduk от Февраля 21, 2006, 15:50
QPixmap pixmap("image.png");
pixmap.setMask(pixmap.createHeuristicMask());


Цитата: "Natalie"
Так фон должен быть прозрачным у самой иконки или прозрачность задавать программно? Если программно, то как?


Название: Выделение иконки в QListWidget
Отправлено: Natalie от Февраля 21, 2006, 18:06
Иконки у меня с прозрачным фоном.

Попробовала написать:
pixmap.setMask(pixmap.createHeuristicMask());
(a также CreateMaskFromColor...)

Но все это не помогает. :(


Название: Выделение иконки в QListWidget
Отправлено: burunduk от Февраля 21, 2006, 18:13
а версия Qt ?

я вставлял иконки в QTableView, то всё красиво выделяется. Естественно прозрачный фон ставил. Можно попробывать на крайний случай заменить например QTableWidget'om.


Название: Выделение иконки в QListWidget
Отправлено: Natalie от Февраля 21, 2006, 19:05
Переделала на QTableWidget и теперь все нормально подсвечивается. Спасибо.

Только вот надпись (т.е. весь item кроме иконки) выделяется пунктиром (прямоугольником таким). Его как-нибудь убрать можно?


Название: Выделение иконки в QListWidget
Отправлено: burunduk от Февраля 22, 2006, 11:54
Кто найдет как убрать этот пунктирный прямоугольник выложите пожалуйста здесь код. Я искал и не нашёл :(


Название: Выделение иконки в QListWidget
Отправлено: nEoN от Февраля 22, 2006, 12:51
Цитата: "burunduk"
Кто найдет как убрать этот пунктирный прямоугольник выложите пожалуйста здесь код. Я искал и не нашёл :(

Вот один вариант - переопределяем метод drawFocus у делегата, и делаем его пустым.
Более простого пути я не нашёл.
Код:
class MyItemDelegate: public QItemDelegate
{
public:
MyItemDelegate(QObject * parent = 0) : QItemDelegate(parent) {}

protected:
void drawFocus(QPainter*, const QStyleOptionViewItem&, const QRect&) const {}
};

// при создании представления
table = new QTableWidget(rows, cols, this);
table->setItemDelegate(new MyItemDelegate(this));


Название: Выделение иконки в QListWidget
Отправлено: burunduk от Февраля 22, 2006, 13:59
класс, работает !  мне это тоже как я понял нужно было :)


Название: Выделение иконки в QListWidget
Отправлено: Natalie от Февраля 22, 2006, 14:02
Все получилось! Большое всем спасибо за помощь!  :)