From f1def0bce92dfdba8ce79eb9f66d2fcbe549cbc4 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 27 Jan 2023 09:58:16 -0600 Subject: [PATCH] trying to wrap qsettings in rust --- src/cpp/qsettingscxx.h | 24 ++++++++++++++++++++++++ src/rust/settings.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/cpp/qsettingscxx.h create mode 100644 src/rust/settings.rs diff --git a/src/cpp/qsettingscxx.h b/src/cpp/qsettingscxx.h new file mode 100644 index 0000000..ddc9340 --- /dev/null +++ b/src/cpp/qsettingscxx.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +#include "rust/cxx.h" + +class QSettingsCXX : public QSettings +{ +public: + explicit QSettingsCXX(QObject* parent = nullptr) + : QSettings(parent) + { + } + + // Can't define in CXX as they are protected + // so crate public methods that are proxied + void setValue(QString key, QString value) + { + QSettings::setValue(key, value); + } + + void sync() { QSettings::sync(); } + +}; diff --git a/src/rust/settings.rs b/src/rust/settings.rs new file mode 100644 index 0000000..2d3ee70 --- /dev/null +++ b/src/rust/settings.rs @@ -0,0 +1,34 @@ +#[cxx_qt::bridge] +mod settings { + + unsafe extern "C++" { + include!("qsettingscxx.h"); + include!("cxx-qt-lib/qstring.h"); + type QString = cxx_qt_lib::QString; + } + + #[derive(Clone)] + #[cxx_qt::qobject(base = "QSettingsCXX")] + pub struct Settings { + #[qproperty] + name: QString, + #[qproperty] + kind: QString, + } + + impl Default for Settings { + fn default() -> Self { + Self { + name: QString::from(""), + kind: QString::from(""), + } + } + } + + impl qobject::Settings { + #[qinvokable] + pub fn activate(self: Pin<&mut Self>) { + println!("{}", self.name()); + } + } +}