Добрый день всем!
Мне необходимо полностью перехватить отрисовку виджета, т.е. что бы он полностью рисовался на мой буфер. Частично это получилось.
Вывел свой класс из QTextEdit. Переопределил в нем функции event(...) и paintEvent(...) для того, что бы заглушить отрисовку виджета. В целом это получилось. Но бэкграунд виджета настырно продолжает рисоваться. Перерыл практически весь QT, но так и не нашел возможности его убрать.
Может кто сталкивался с данной проблемой или подскажет как это можно побороть?
header:
C++ (Qt)
class TextEditQT : public QTextEdit
{
public:
TextEditQT(QWidget *parent);
public:
bool is_updated()
{
return _is_updated;
}
void setGrabStat(bool state)
{
_is_grab = state;
}
void setUpdateStat(bool state)
{
_is_updated = state;
}
protected:
virtual bool event(QEvent *event);
virtual void paintEvent(QPaintEvent * event);
private:
bool _is_updated,
_is_grab;
};
source:
C++ (Qt)
TextEditQT::TextEditQT(QWidget *parent)
: QTextEdit(parent), _is_updated(false), _is_grab(false)
{
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setAutoFillBackground(false);
setAttribute(Qt::WA_StyledBackground, false);
setAttribute(Qt::WA_OpaquePaintEvent);
setAttribute(Qt::WA_NoSystemBackground);
setAttribute(Qt::WA_PaintOnScreen);
}
bool
TextEditQT::event(QEvent *event)
{
if (!_is_grab)
{
switch (event->type())
{
case QEvent::Paint:
case QEvent::UpdateRequest:
{
_is_updated = true;
event->accept();
return true;
}
break;
}
}
return QTextEdit::event(event);
}
void
TextEditQT::paintEvent(QPaintEvent * event)
{
if (!_is_grab)
{
_is_updated = true;
event->accept();
}
else
QTextEdit::paintEvent(event);
}