یک از چالش های مهم توسعه اپلیکیشن، ذخیره و بازخوانی تنظیمات (Settings) برنامه است. خوشبختانه فریم ورک کیوت Qt با معرفی نوع Settings در کیو ام ال Qml بار زیادی از دوش برنامه نویس برداشته است.

تنظیمات در Qt Qml
در کیو ام ال Qml می توانیم از نوع Settings برای ذخیره و بازخوانی تنظیمات استفاده کنیم. تنظیمات بصورت جفت های (Pair) کلید-مقدار (key-valud) ذخیره می شوند.
برای ذخیره تنظیمات از دو روش می توانیم استفاده کنیم. در روش اول از property alias استفاده می کنیم. در این روش ذخیره و بازخوانی مقادیر بطور خودکار انجام می شود. به این صورت که با هر تغییر در تنظیمات، مقادیر فورا در دیسک ذخیره می شوند. در تکه کد زیر استفاده از این روش را ملاحظه می کنید.
import QtCore
import QtQuick
Window {
id: window
width: 800
height: 600
Settings {
property alias width: window.width
property alias height: window.height
}
}
در تکه کد بالا، مقادیر width=800 و 600=height در اولین اجرای برنامه در مقادیر width و height در المان Settings ذخیره می شوند. هر زمان که اندازه پنجره تغییر کند، مقادیر Settings نیز تغییر کرده و ذخیره می شوند. با اجرای دوباره برنامه در آینده مقادیر ذخیره شده در Settings به عرض و ارتفاع پنجره اعمال می شوند.
توجه: برای استفاده از Settings در Qt 6.5 و بالاتر کتابخانه QtCore را با استفاده از import QtCore به فایل کیو ام ال اضافه کنید. برای نسخه های پایینتر کتابخانه Qt.labs.settings 1.0 را (import Qt.labs.settings 1.0)
ذخیره دستی تنظیمات
در روش بالا با توجه به اینکه با هر تغییر در مقادیر، تنظیمات فورا ذخیره می شوند و سربار محاسباتی دارند. استفاده از این روش برای مقادیری که زیاد تغییر می کنند توصیه نمی شود. و بجای آن بهتر است ذخیره بصورت دستی انجام شود. به این صورت که مثلا برای ذخیره از رویداد onClicked یک دکمه (Button) استفاده کنیم و یا در رویداد onDestruction صفحه این کار را انجام دهیم. در تکه زیر کد از این روش استفاده شده است. دقت کنید که بجای alias از نوع مقدار استفاده شده است. نوع مقادیر قابل استفاده در Settingsمقادیری است که QSettings می پذیرد.
import QtCore
import QtQuick
import QtQuick.Controls
Item {
id: page
property int counter: settings.counter
Button { text: "add"; onClicked: page.counter++ }
Text { text: page.counter; x: 100 }
Settings {
id: settings
property int counter: 0
}
Component.onDestruction: {
settings.counter = page.counter
}
}
در تکه کد بالا مقدار اولیه counter برابر صفر است. با کلیک روی دکمه Add مقدار counter تغییر می کند ولی این تغییرات در Settings اعمال نمی شود. با بسته شدن صفحه مقدار شمارنده در تنظیمات بروز می شود. وقتی دوباره صفحه را باز می کنیم مقدار شمارنده از المان Settings بازخوانی می شود.
سامپلیت یک بازی ساده شبه سودوکو است که هوش مصنوعی ChatGPT آن را ایجاد کرده است. نام بازی نیز پیشنهاد هوش مصنوعی است و ترکیب دو کلمه انگلیسی Sum و Complete است.