QGuiApplication::paletteChanged(const QPalette &palette) [signal]

This allows QQuickSystemPalette to listen to palette changes without
installing an expensive event filter on the application object.

Change-Id: I8b693e047d993c444e393d7a714a5709692c3560
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
This commit is contained in:
J-P Nurmi 2014-06-20 10:55:18 +02:00
parent b31c9d8c03
commit 82d906a20d
3 changed files with 38 additions and 0 deletions

View File

@ -2652,6 +2652,15 @@ QClipboard * QGuiApplication::clipboard()
}
#endif
/*!
\since 5.4
\fn void QGuiApplication::paletteChanged(const QPalette &palette)
This signal is emitted when the \a palette of the application changes.
\sa palette()
*/
/*!
Returns the default application palette.
@ -2678,6 +2687,7 @@ void QGuiApplication::setPalette(const QPalette &pal)
else
*QGuiApplicationPrivate::app_pal = pal;
applicationResourceFlags |= ApplicationPaletteExplicitlySet;
emit qGuiApp->paletteChanged(*QGuiApplicationPrivate::app_pal);
}
QRect QGuiApplicationPrivate::applyWindowGeometrySpecification(const QRect &windowGeometry, const QWindow *window)

View File

@ -174,6 +174,7 @@ Q_SIGNALS:
void commitDataRequest(QSessionManager &sessionManager);
void saveStateRequest(QSessionManager &sessionManager);
#endif
void paletteChanged(const QPalette &pal);
protected:
bool event(QEvent *);

View File

@ -45,6 +45,7 @@
#include <QtGui/QWindow>
#include <QtGui/QScreen>
#include <QtGui/QCursor>
#include <QtGui/QPalette>
#include <qpa/qwindowsysteminterface.h>
#include <qgenericplugin.h>
@ -72,6 +73,7 @@ private slots:
void abortQuitOnShow();
void changeFocusWindow();
void keyboardModifiers();
void palette();
void modalWindow();
void quitOnLastWindowClosed();
void genericPluginsAndWindowSystemEvents();
@ -434,6 +436,31 @@ void tst_QGuiApplication::keyboardModifiers()
window->close();
}
void tst_QGuiApplication::palette()
{
int argc = 1;
char *argv[] = { const_cast<char*>("tst_qguiapplication") };
QGuiApplication app(argc, argv);
QSignalSpy signalSpy(&app, SIGNAL(paletteChanged(QPalette)));
QPalette oldPalette = QGuiApplication::palette();
QPalette newPalette = QPalette(Qt::red);
QGuiApplication::setPalette(newPalette);
QCOMPARE(QGuiApplication::palette(), newPalette);
QCOMPARE(signalSpy.count(), 1);
QCOMPARE(signalSpy.at(0).at(0), QVariant(newPalette));
QGuiApplication::setPalette(oldPalette);
QCOMPARE(QGuiApplication::palette(), oldPalette);
QCOMPARE(signalSpy.count(), 2);
QCOMPARE(signalSpy.at(1).at(0), QVariant(oldPalette));
QGuiApplication::setPalette(oldPalette);
QCOMPARE(QGuiApplication::palette(), oldPalette);
QCOMPARE(signalSpy.count(), 2);
}
class BlockableWindow : public QWindow
{
Q_OBJECT