Add QApplication.setStyleSheet()

This commit is contained in:
Simon Edwards 2021-07-30 09:22:04 +02:00
parent f319a24ad3
commit 880a8433cb
3 changed files with 24 additions and 2 deletions

View File

@ -29,7 +29,7 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap<QApplicationWrap> {
Napi::Value setQuitOnLastWindowClosed(const Napi::CallbackInfo& info);
Napi::Value quitOnLastWindowClosed(const Napi::CallbackInfo& info);
Napi::Value palette(const Napi::CallbackInfo& info);
// setStyleSheet
Napi::Value setStyleSheet(const Napi::CallbackInfo& info);
};
namespace StaticQApplicationWrapMethods {

View File

@ -22,6 +22,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) {
InstanceMethod("quitOnLastWindowClosed",
&QApplicationWrap::quitOnLastWindowClosed),
InstanceMethod("palette", &QApplicationWrap::palette),
InstanceMethod("setStyleSheet", &QApplicationWrap::setStyleSheet),
StaticMethod("instance", &StaticQApplicationWrapMethods::instance),
StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard),
StaticMethod("style", &StaticQApplicationWrapMethods::style),
@ -92,6 +93,19 @@ Napi::Value QApplicationWrap::palette(const Napi::CallbackInfo& info) {
{Napi::External<QPalette>::New(env, palette)});
}
Napi::Value QApplicationWrap::setStyleSheet(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::String text = info[0].As<Napi::String>();
std::string style = text.Utf8Value();
QString newStyle = QString::fromStdString(style);
QString currentStyleSheet = this->instance->styleSheet();
if (newStyle != currentStyleSheet) {
this->instance->setStyleSheet(newStyle);
}
return env.Null();
}
Napi::Value StaticQApplicationWrapMethods::instance(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();

View File

@ -6,9 +6,11 @@ import { QStyle } from './QStyle';
import { QObjectSignals, NodeObject } from '../QtCore/QObject';
import { QDesktopWidget } from '../QtWidgets/QDesktopWidget';
import { QPalette } from './QPalette';
import { StyleSheet } from '../core/Style/StyleSheet';
import memoizeOne from 'memoize-one';
/**
> QApplication is the root object for the entire application. It manages app level settings.
* **This class is a JS wrapper around Qt's [QApplication class](https://doc.qt.io/qt-5/qapplication.html)**
@ -37,6 +39,8 @@ export class QApplication extends NodeObject<QApplicationSignals> {
}
super(native);
this.native = native;
this.setStyleSheet = memoizeOne(this.setStyleSheet);
}
static clipboard(): QClipboard {
return new QClipboard(addon.QApplication.clipboard());
@ -66,6 +70,10 @@ export class QApplication extends NodeObject<QApplicationSignals> {
palette(): QPalette {
return new QPalette(this.native.palette());
}
setStyleSheet(styleSheet: string): void {
const preparedSheet = StyleSheet.create(styleSheet);
this.native.setStyleSheet(preparedSheet);
}
static style(): QStyle {
return new QStyle(addon.QApplication.style());
}