Habeich eine Möglichkeit, die Form des Fensters zu beeinflussen, ähnlich wie hier:
http://www.vbarchiv.net/workshop/workshop04.php
?
MfG
[gelöst] runde Fenster
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Also ich kenne jetzt auch auswendig keines, aber ich habe Teile von Winamp für Unix nachprogrammiert, hier mal ein paar Ideen:
Für Fenster ohne Rahmen:
Für Bilder, die bei Transparentz abgeschnitten werden (Am besten in paintEvent aufgehoben):
Hier noch die wirkliche Funktion, die die durchsichtigen Pixel löscht:
Anmerkung:
Der Code ist ein wenig älter und da ich gerne auskommentiere, herumprobiere und teilweise Änderungen die nicht funktionieren so lasse könne es durchaus sein, dass das so nicht funktioniert. Aber von Prinzip her ist es perfekt. Was nicht funktionieren könne sind die Dinge im paintEvent, der Rest sollte völlig problemlos laufen.
Für Fenster ohne Rahmen:
Code: Alles auswählen
Xgq3Base::Xgq3Base( QWidget *parent, const char *name ) : QWidget( parent, name, WStyle_Customize | WStyle_NoBorder )
Code: Alles auswählen
QString mainIncludes = "/home/floh/.xgq/Skins/winamp3_default/xml/player-normal.xml";
bgImage = "/home/floh/.xgq/Skins/OHE3/player/background.png";
QImage img(bgImage);
QImage img2(img.width(), img.height(), 1, 2, QImage::LittleEndian);
img2.setColor(0, qRgb(0, 0, 0));
img2.setColor(1, qRgb(255, 255, 255));
for (int height = 0; height < img.height(); height++)
{
for (int width = 0; width < img.width(); width++)
setPixel1BPP(img2, width, height, qAlpha(img.pixel(width, height)) >= 70);
}
QBitmap mask;
mask.convertFromImage(img2);
setMask(mask);
Code: Alles auswählen
void Xgq3Base::setPixel1BPP(QImage &image, int x, int y, bool value)
{
if ( image.bitOrder() == QImage::LittleEndian )
{
if (value)
*(image.scanLine(y) + (x >> 3)) |= 1 << (x & 7);
else
*(image.scanLine(y) + (x >> 3)) &= ~(1 << (x & 7));
}
else
{
if (value)
*(image.scanLine(y) + (x >> 3)) |= 1 << (7-(x & 7));
else
*(image.scanLine(y) + (x >> 3)) &= ~(1 << (7-(x & 7)));
}
}
Der Code ist ein wenig älter und da ich gerne auskommentiere, herumprobiere und teilweise Änderungen die nicht funktionieren so lasse könne es durchaus sein, dass das so nicht funktioniert. Aber von Prinzip her ist es perfekt. Was nicht funktionieren könne sind die Dinge im paintEvent, der Rest sollte völlig problemlos laufen.