Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: 0xFF от Май 04, 2011, 01:13



Название: Рисование на QTableView
Отправлено: 0xFF от Май 04, 2011, 01:13
Доброго времени суток
В приложении есть таблица, которая портит внешний вид окна когда пустует) Хочется в момент пребывания ее в этом нежелательном состоянии написать поверх несколько строк текста.
В paintEvent рисовать не хотит, QPainter p(this) сыплет в дебаг следующее QPainter::begin: Paint device returned engine == 0, type: 1

Как на ней можно порисовать?


Название: Re: Рисование на QTableView
Отправлено: juvf от Май 04, 2011, 05:47
Цитировать
В приложении есть таблица
А что есть таблица?
У меня такая же задача. только у меня куча таблиц. Центральный виджет отнаследовал от QStackedWidget в который помещаю по мере надобности таблицы в виде QTableView + модель. Пока нет данных центральный виджет зарисовываю
Код:
void ProcessTable::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawTiledPixmap(rect(), QPixmap(":icons/logo1.xpm"));
}


Название: Re: Рисование на QTableView
Отправлено: 0xFF от Май 04, 2011, 12:40
Таблица представляет из себя QAbstractTableModel + QItemDelegate + QTableView

Приведенный вами код я использовал так:
Код
C++ (Qt)
class TableView : public QTableView
{
...
protected:
   void paintEvent(QPaintEvent *e);
 
};
 
void TableView::paintEvent(QPaintEvent *event)
{
   QPainter painter(this);
   painter.drawLine(0,0,50,50);
}
 
в итоге вместо линии получалось посмотреть в дебаге - QPainter::begin: Paint device returned engine == 0, type: 1


Название: Re: Рисование на QTableView
Отправлено: GreatSnake от Май 04, 2011, 12:55
Вся отрисовка в наследниках QAbstractScrollArea делается на вьюпорте.
Создайте свой вьюпорт через
Код
C++ (Qt)
void QAbstractScrollArea::setViewport ( QWidget * widget )
и уже в нём делайте отрисовку.
Только, имхо, через QStackedWidget, как советует juvf, проще будет.


Название: Re: Рисование на QTableView
Отправлено: 0xFF от Май 04, 2011, 13:42
Спасибо, рисовать обычно не приходится, но это уже не первый случаи когда я забываю о вьюпорте)