Приветствую всех!
И снова я с проблемой полупрозрачности в Qt. Вот такой вот пример кода:
TestChildWidget.hpp
#ifndef __TEST_CHILD_WIDGET_HPP
#define __TEST_CHILD_WIDGET_HPP
#include <QWidget>
class TestChildWidget : public QWidget
{
Q_OBJECT
public:
TestChildWidget(QWidget * parent = NULL);
~TestChildWidget() {};
};
#endif
TestChildWidget.cpp
#include <TestChildWidget.hpp>
#include <QPalette>
TestChildWidget::TestChildWidget(QWidget * parent/* = NULL*/)
: QWidget(parent)
{
QPalette pal(palette());
pal.setColor(QPalette::Window, QColor(255, 0, 0, 120));
setPalette(pal);
setAutoFillBackground(true);
};
TestWidget.hpp
ifndef __TEST_WIDGET_HPP
#define __TEST_WIDGET_HPP
#include <QWidget>
class QPaintEvent;
class TestWidget : public QWidget
{
Q_OBJECT
public:
TestWidget(QWidget * parent = NULL);
~TestWidget() {};
protected:
void paintEvent(QPaintEvent * event);
};
#endif
[b]TestWidget.cpp[/b]
#include <TestWidget.hpp>
#include <QPainter>
#include <QPaintEvent>
#include <QPalette>
TestWidget::TestWidget(QWidget * parent/* = NULL*/)
: QWidget(parent)
{
QPalette pal(palette());
pal.setColor(QPalette::Window, QColor(255, 255, 255, 255));
setPalette(pal);
setAutoFillBackground(true);
};
void TestWidget::paintEvent(QPaintEvent * event)
{
QPainter painter;
painter.begin(this);
painter.setRenderHint(QPainter::TextAntialiasing);
painter.drawText(30, 30, "TEST STRING!!!!");
painter.end();
};
main.cpp
#include <TestWidget.hpp>
#include <TestChildWidget.hpp>
#include <QApplication>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
TestWidget * parent = new TestWidget();
TestChildWidget * child = new TestChildWidget(parent);
TestChildWidget * child2 = new TestChildWidget(parent);
parent->resize(200, 100);
child->resize(50, 50);
child2->resize(50, 50);
child->move(10, 10);
child2->move(20, 20);
parent->show();
return app.exec();
};
Программа рисует окно, в нём тестовую надпись и 2 полупрозрачных виджета поверх. Всё замечательно, полупрозрачность работает.
А теперь, если изменить во в виджетах родительский класс с QWidget на QGLWidget (т.е. попытаться задействовать OpenGL) получаем полную фигню: прозрачности нет, вместо полупрозрачных виджетов получаем чёрные квадраты малевича.
У кого-нибудь есть какие-то идеи как лечить?...
Заранее спасибо!