QSplashScreen-Replacement-for-Semitransparent-Images: Difference between revisions
Jump to navigation
Jump to search
AutoSpider (talk | contribs) (Add "cleanup" tag) |
AutoSpider (talk | contribs) (Decode HTML entity names) |
||
Line 32: | Line 32: | ||
{ | { | ||
public: | public: | ||
CSplashScreen(const QPixmap& | CSplashScreen(const QPixmap& pixmap); | ||
void clearMessage(); | void clearMessage(); | ||
void showMessage(const QString& | void showMessage(const QString& theMessage, int theAlignment = Qt::AlignLeft, const QColor& theColor = Qt::black); | ||
private: | private: | ||
Line 57: | Line 57: | ||
//////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////// | ||
CSplashScreen::CSplashScreen(const QPixmap& | CSplashScreen::CSplashScreen(const QPixmap& thePixmap) | ||
: QFrame(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint) | : QFrame(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint) | ||
, itsPixmap(thePixmap) | , itsPixmap(thePixmap) | ||
Line 73: | Line 73: | ||
//////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////// | ||
void CSplashScreen::showMessage(const QString& | void CSplashScreen::showMessage(const QString& theMessage, int theAlignment/* = Qt::AlignLeft*/, const QColor& theColor/* = Qt::black*/) | ||
{ | { | ||
itsMessage = theMessage; | itsMessage = theMessage; |
Revision as of 17:33, 12 March 2015
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
[toc align_right="yes" depth="4"]
CSplashScreen
The CSplashScreen class can be used as a replacement for the Qt class QSplashScreen if semitransparent images using an alpha channel with more than 1 bit needs to be used.
The new class tries to mimic as much as possible the functionality and appearance of the original QSplashScreen class and only misses a few methods to keep this code snipped as simple as possible.
In the implementation all comes down to use a QFrame with the Qt::WA_TranslucentBackground attribute and emulate the functionality of QSplashScreen.
CSplashScreen.pro
HEADERS ''= CSplashScreen.h
SOURCES''= CSplashScreen.cpp main.cpp
OTHER_FILES ''=
RESOURCES''= images.qrc
CSplashScreen.h
#ifndef CSPLASHSCREEN_''H
#define CSPLASHSCREENH
#include <QFrame>
////////////////////////////////////////////////////////////////////////////
class CSplashScreen : public QFrame
{
public:
CSplashScreen(const QPixmap& pixmap);
void clearMessage();
void showMessage(const QString& theMessage, int theAlignment = Qt::AlignLeft, const QColor& theColor = Qt::black);
private:
virtual void paintEvent(QPaintEvent* pe);
QPixmap itsPixmap;
QString itsMessage;
int itsAlignment;
QColor itsColor;
};
#endif // CSPLASHSCREEN''_H
CSplashScreen.cpp
#include <QPainter>
#include "CSplashScreen.h"
////////////////////////////////////////////////////////////////////////////
CSplashScreen::CSplashScreen(const QPixmap& thePixmap)
: QFrame(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint)
, itsPixmap(thePixmap)
{
setAttribute(Qt::WA_TranslucentBackground);
setFixedSize(itsPixmap.size());
};
////////////////////////////////////////////////////////////////////////////
void CSplashScreen::clearMessage()
{
itsMessage.clear();
repaint();
}
////////////////////////////////////////////////////////////////////////////
void CSplashScreen::showMessage(const QString& theMessage, int theAlignment/* = Qt::AlignLeft*/, const QColor& theColor/* = Qt::black*/)
{
itsMessage = theMessage;
itsAlignment = theAlignment;
itsColor = theColor;
repaint();
}
////////////////////////////////////////////////////////////////////////////
void CSplashScreen::paintEvent(QPaintEvent* pe)
{
QRect aTextRect(rect());
aTextRect.setRect(aTextRect.x() + 5, aTextRect.y() + 5, aTextRect.width() - 10, aTextRect.height() - 10);
QPainter aPainter(this);
aPainter.drawPixmap(rect(), itsPixmap);
aPainter.setPen(itsColor);
aPainter.drawText(aTextRect, itsAlignment, itsMessage);
}
main.cpp
#include <QApplication>
#include <QThread>
#include "CSplashSCreen.h"
int main(int argc, char '''argv[])
{
QApplication anApplication(argc, argv);
class SleeperThread : public QThread
{
public:
static void msleep(unsigned long msecs) {QThread::msleep(msecs);}
};
QPixmap aSplashImage(":/splash.png");
CSplashScreen''' aSplashScreen = new CSplashScreen(aSplashImage);
aSplashScreen->show();
for (int i = 1; i <= 5; i++)
{
aSplashScreen->showMessage(QString("Processing %1…").arg(i), Qt::AlignTop | Qt::AlignLeft, Qt::white);
SleeperThread::msleep(1000);
}
delete aSplashScreen;
return 0;
}