From 902eec31a4b6f0403a379e1c242914174b87deb5 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Sat, 25 Jul 2026 20:00:30 +0400 Subject: rewrite in qt5 instead of qtquick --- crates/flasher-qt/src/main.rs | 50 +++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 14 deletions(-) (limited to 'crates/flasher-qt/src/main.rs') diff --git a/crates/flasher-qt/src/main.rs b/crates/flasher-qt/src/main.rs index f131bc5..e304418 100644 --- a/crates/flasher-qt/src/main.rs +++ b/crates/flasher-qt/src/main.rs @@ -1,21 +1,43 @@ -use qmetaobject::{QmlEngine, QString, QVariant}; -use std::fs; +use std::{ + env, + ffi::CString, + fs, + os::raw::{c_char, c_int}, +}; const BOARDS: &str = include_str!("../../../alt-rootfs-installer/SUPPORTED-BOARDS"); -const QML: &str = include_str!("../qml/Main.qml"); + +unsafe extern "C" { + fn run_qt_app( + argc: c_int, + argv: *mut *mut c_char, + boards: *const c_char, + drives: *const c_char, + ) -> c_int; +} fn main() { - let mut engine = QmlEngine::new(); - engine.set_property( - QString::from("supportedBoardsText"), - QVariant::from(QString::from(BOARDS)), - ); - engine.set_property( - QString::from("availableDrivesText"), - QVariant::from(QString::from(available_drives().join("\n"))), - ); - engine.load_data(QML.into()); - engine.exec(); + let arguments: Vec = env::args() + .map(|arg| CString::new(arg).expect("application argument contains a NUL byte")) + .collect(); + let mut argument_pointers: Vec<*mut c_char> = arguments + .iter() + .map(|arg| arg.as_ptr().cast_mut()) + .collect(); + let boards = CString::new(BOARDS).expect("board list contains a NUL byte"); + let drives = CString::new(available_drives().join("\n")) + .expect("drive description contains a NUL byte"); + + // QApplication only borrows argv and the two strings for the duration of + // this call; all backing CStrings remain alive until the event loop exits. + unsafe { + run_qt_app( + argument_pointers.len() as c_int, + argument_pointers.as_mut_ptr(), + boards.as_ptr(), + drives.as_ptr(), + ); + } } fn available_drives() -> Vec { -- cgit v1.2.3