LINUX.ORG.RU

[Qt][Основы] Картинка в таблице

 


0

0

Задача: отобразить картинку (jpeg, png или gif) в ячейке таблицы. Я только начинаю изучать Qt, да и плюсы тоже, поэтому тупо не понимаю, как это лучше делать. Пока на ум приходят только два варианта: 1) Унаследовать QTableWidgetItem и переписать метод, отвественный за отрисовку компонента (какой? paint() вроде бы нигде нет) 2) Использовать технологию modell-view и написать собственный делегат для этой ячейки. В нем переписать метод paint().

Что из этого лучше, реальнее, проще? Или есть вообще какие-то другие варианты?


Если не ошибаюсь, можно еще по-быстрому виджет в ячейку поместить (например QLabel с картинкой). А вообще делай так, как ты написал в пункте 2 - быстрее прокачаешься.

mannaz
()

у QTableWidgetItem есть свойство icon

nu11 ★★★★★
()

Не надо ничего переписывать. Создаешь наследника от QStyledItemDelegate (который присваиваешь своей таблице с помощью setItemDelegate) и в методе paint(QPainter *p,...) рисуешь свою картинку с помощью p->drawPixmap.

lester_dev ★★★★★
()
Ответ на: комментарий от nu11

>Ни одной строчки кода, все в дизигнере.

А если ему нужно в произвольной ячейке нарисовать, а не только в первой колонке?

coolface.jpg

lester_dev ★★★★★
()
Ответ на: комментарий от nu11

>в любой можно, это свойство ячейки

А если данные у него в QSqlTableModel, где картинки хранятся в блобах?

even_more_coolface.jpg

lester_dev ★★★★★
()

Картинки не из БД, но путь к ним читается из csv-файла. Я так понимаю, что в этом случае всё равно QIcon не применим?

И по поводу иконок. Как сделать, чтобы они не масштабировались и увеличивали размер ячейки, в которой они отображаются? Собственно как на этом скрине: http://dl.dropbox.com/u/998228/LOR/qt-tablewidget.png

BobiKK
() автор топика
Ответ на: комментарий от lester_dev

Пишу, пишу. Про QIcon просто интересно, что он ещё умеет.

BobiKK
() автор топика
Ответ на: комментарий от BobiKK

>Я так понимаю, что в этом случае всё равно QIcon не применим?
никто не запрещал загружать графику из файлов :)

Как сделать, чтобы они не масштабировались и увеличивали размер ячейки

автоматически - не знаю. Вручную можно задать iconSize у всей таблицы

nu11 ★★★★★
()

>переписать метод, отвественный за отрисовку компонента
это под WIN32API надо было так делать. Qt уже давно шагнул дальше.

xydo ★★
()
Ответ на: комментарий от lester_dev

>Чувак, пиши своего делегата, меньше геморроя оберешся потом

да да, больше слушай старого велосипедостроителя-извращенца :)

nu11 ★★★★★
()

Мне как-то надо было кнопку (QPushButton) поместить в ячейку, воспользовался этим:

QTableWidget::setCellWidget ( int row, int column, QWidget * widget )

Вместо виджета можно поставить, например, label с картинкой. Удобно, когда строка и столбец вычисляются программно.

world
()
Ответ на: комментарий от world

У QLabel имеется свойство pixmap типа QPixmap, причём QPixmap можно загрузить из файла:

QPixmap::QPixmap ( const QString & fileName, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor )

world
()
Ответ на: комментарий от world

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

а вообще. картинку оно сам рисовать вроде умеет, ставишь правильную data и все

namezys ★★★★
()
Ответ на: комментарий от namezys

Редактирование? Оно просто помещает виджет туда. До момента перестройки модели, емнип.

Насчёт правильной даты это интересно, надо будет почитать.

world
()
Ответ на: комментарий от world

> QTableWidget::setCellWidget ( int row, int column, QWidget * widget )

Это подходит только для QTableWidget, но не QTableView. С TableView лучше делегата.

anonymous
()
Ответ на: комментарий от world

Всем большое спасибо, узнал много нового. И убедился, насколько гибким может быть Qt.

BobiKK
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.