вот тут http://www.forum.crossplatform.ru/index.php?showtopic=4154 Litkevich Yuriy выложил пример AeroButton. В программе сделал кнопки примерно также. Но чтука в том что под виндой эти кнопки получаются с идеально на мой взгляд ровными обводами засчет антиалайзинга.. А вот под линуксом они ужасны. Вычитал, что в иксах нужно для достижения такого же результат включить какую-то опцию отрисовки. Но есть универсальный способ: рисование на QImage (т.е. как бы использование его движка, а не "движка" ОС). Вот делаю как в книге написано =)
void CRoundButton::paintEvent(QPaintEvent *pEvent)
{
QImage oImage(this->size(), QImage::Format_ARGB32_Premultiplied);
QPainter oImagePainter(&oImage);
oImagePainter.initFrom(this);
oImagePainter.setRenderHint(QPainter::Antialiasing, true);
oImagePainter.eraseRect(this->rect());
//тут отрисовка по сути таже что и в примере aerobutton (только на oImagePainter)
//и потом
oImagePainter.end();
QPainter oWidgetPainter(this);
oWidgetPainter.drawImage(0, 0, oImage);
Кнопки рисуются, причем прозрачные... но вот по краям виден белый прямоугольный фон. Вот пример:
Как это можно победить? Пробовал играться с QPainter::CompositionMode, максимально только к этому беломы фону прозрачность добавляется....но сам он не исчезает естественно...
Спасибо!