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

تنظیمات اپلیکیشن Qt 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 است.

تنظیمات در Qt Qml
Tagged on: