رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 0
mousa1994

پاک شدن داده های QStringList بعد از بستن برنامه


سوال

ارسال شده در (ویرایش شده)

سلام،

من توی Qt تازه کارم و رشته ام الکترونیک هستش. من توی برنامه ام یه QStringList ماکزیمم 10 عضوی دارم هر عضو هم نهایت 20 کاراکتر داره اعضای QStringList بجز عضو صفرم در طول برنامه ممکن تغییرات داشته باشند برنامه ای که نوشتم بخوبی کار میکنه تنها مشکلم این که بعد از بسته شدن برنامه QStringList برمی‌گرده به حالت اولیه که فقط عضو صفرم مقدار داره و بقیه اعضا پاک میشن.

عضو صفرم QStringList چون اول برنامه مقدار اولیه بهش دادم بعد از بستن و باز کردن برنامه همون مقدار رو در خودش داره ولی بقیه اعضای QStringList چون در طول برنامه یا به لیست اضافه یا از لیست کم میشن بعد از بستن برنامه پاک میشن. فکر کنم بخاطر اینکه حافظه گرفته شده بعد از بستن برنامه آزاد میشه حالا من چطور این لیست رو روی توی برنامه ذخیره کنم که بعد از بستن و باز کردن برنامه تغییرات QStringList l من باقی بمونه.

امیدوارم منظورم رو بدرستی رسونده باشم.

ویرایش شده در توسط کامبیز اسدزاده
نگارش و مشکلات املائی

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0
ارسال شده در (ویرایش شده)

سلام.

چنانچه در تنظیمات برنامه های مختلف تغییری ایجاد کنین به شما پیامی مبنی بر بازگشایی مجدد برنامه به منظور لحاظ شدن تغییرات جدید میده. این به این معنیه که خیلی از تنظیماتی که در برنامه ها انجام میدیم در فایلی در یکی از شاخه های برنامه بنا به صلاح دید سازندگان برنامه ذخیره میشه و هر بار که برنامه باز میشه اطلاعات از اون فایل خونده و در فصل جاری برنامه لحاظ میشه. (مثلا بازیابی اندازه های پنجره های مختلف در برنامه در آخرین بار استفاده و...)

شما میتونین اطلاعاتی که مد نظرتون هست رو در فایل مخصوصی در مسیر برنامه یا هر جایی که صلاح میدونید ایجاد کنید و اطلاعات آرایتون رو داخلش ذخیره کنین.

به عنوان مثال داریم:

#include <QCoreApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QStringList text;

    QFile file("text.txt");
    if (file.open(QIODevice::ReadOnly))
    {
        QTextStream in(&file);
        while (!in.atEnd())
        {
            text << in.readLine();
        }
        file.close();
        qDebug() << text << '\n';
    }else{
        if (file.open(QIODevice::WriteOnly)){
        QTextStream out(&file);
        out << "Hello!\n"
               "Settings are saved here\n"
               "Goodbye!\n";
        }
        qDebug() << "Setting successfully saved in file please reopen the app!\n";
    }

    return a.exec();
}

در این مثال ساده کاری که انجام میشه ابتدا بر روی هارد بررسی میشه که آیا فایل متنی text وجود داره یا خیر. اگر وجود داشت که محتویاتش خونده میشه و در داخل شی text ریخته میشه در غیر این صورت یک فایل متنی با این نام در پوشه حاوی پروژه کیوت ایجاد و مقادیر: !Hello و .Settings are saved here و !Goodbye اونجا ذخیره میشن.

حالا اگر برنامه رو مجددا اجرا کنین اینبار اطلاعات از فایل text خونده میشن و در خروجی چاپ میشن.

ویرایش شده در توسط نیما غراب
غلط املایی

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 11 ساعت قبل، mousa1994 گفته است :

سلام،

من توی Qt تازه کارم و رشته ام الکترونیک هستش. من توی برنامه ام یه QStringList ماکزیمم 10 عضوی دارم هر عضو هم نهایت 20 کاراکتر داره اعضای QStringList بجز عضو صفرم در طول برنامه ممکن تغییرات داشته باشند برنامه ای که نوشتم بخوبی کار میکنه تنها مشکلم این که بعد از بسته شدن برنامه QStringList برمی‌گرده به حالت اولیه که فقط عضو صفرم مقدار داره و بقیه اعضا پاک میشن.

عضو صفرم QStringList چون اول برنامه مقدار اولیه بهش دادم بعد از بستن و باز کردن برنامه همون مقدار رو در خودش داره ولی بقیه اعضای QStringList چون در طول برنامه یا به لیست اضافه یا از لیست کم میشن بعد از بستن برنامه پاک میشن. فکر کنم بخاطر اینکه حافظه گرفته شده بعد از بستن برنامه آزاد میشه حالا من چطور این لیست رو روی توی برنامه ذخیره کنم که بعد از بستن و باز کردن برنامه تغییرات QStringList l من باقی بمونه.

امیدوارم منظورم رو بدرستی رسونده باشم.

 

سلام

اگه منظورتون کلا بسته شدن برنام هستش که باید اطلاعاتتون رو توی فایل text ذخیره کنید و بعد دوباره اطلاعات رو از فایل text به QStringList بیارید! چون عضو اول همونطور که گفتید  اول برنامه تایین شده پس با بسته شدن برنامه کلا مابقی اطلاعات از بین می رن.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 11 ساعت قبل، mousa1994 گفته است :

سلام،

من توی Qt تازه کارم و رشته ام الکترونیک هستش. من توی برنامه ام یه QStringList ماکزیمم 10 عضوی دارم هر عضو هم نهایت 20 کاراکتر داره اعضای QStringList بجز عضو صفرم در طول برنامه ممکن تغییرات داشته باشند برنامه ای که نوشتم بخوبی کار میکنه تنها مشکلم این که بعد از بسته شدن برنامه QStringList برمی‌گرده به حالت اولیه که فقط عضو صفرم مقدار داره و بقیه اعضا پاک میشن.

عضو صفرم QStringList چون اول برنامه مقدار اولیه بهش دادم بعد از بستن و باز کردن برنامه همون مقدار رو در خودش داره ولی بقیه اعضای QStringList چون در طول برنامه یا به لیست اضافه یا از لیست کم میشن بعد از بستن برنامه پاک میشن. فکر کنم بخاطر اینکه حافظه گرفته شده بعد از بستن برنامه آزاد میشه حالا من چطور این لیست رو روی توی برنامه ذخیره کنم که بعد از بستن و باز کردن برنامه تغییرات QStringList l من باقی بمونه.

امیدوارم منظورم رو بدرستی رسونده باشم.

از کلاس QTextDocument استفاده کنید که مدیریت یک سند متنی رو بر عهده می گیره، با استفاده از متد  findBlockByLineNumber

می تونید یک بلوک متنی رو  دریافت کنید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

خیلی ممنون از پاسخ هاتون، کاری که من میخوام بکنم این که یه دیالوگ قبل از ورود به برنامه بذارم تا کاربرهای مجاز بتونند از برنامه استفاده کنند حالا من یه لیست 10 عضوی تعریف کردم که عضو صفرم که برای Admin هستش مقدار اولیه دادم و بقیه اعضا توی برنامه توسط ادمین به لیست اضافه میشن یا از لیست کم میشن. نمیخوام از فایل استفاده که حداقل بصورت متنی که قابل مشاهده باشه. بنظر شما باید چیکار کنم کاری که انجام دادم درسته یا راه بهتری سراغ دارین برای انجام اینکار. 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 4 ساعت قبل، mousa1994 گفته است :

خیلی ممنون از پاسخ هاتون، کاری که من میخوام بکنم این که یه دیالوگ قبل از ورود به برنامه بذارم تا کاربرهای مجاز بتونند از برنامه استفاده کنند حالا من یه لیست 10 عضوی تعریف کردم که عضو صفرم که برای Admin هستش مقدار اولیه دادم و بقیه اعضا توی برنامه توسط ادمین به لیست اضافه میشن یا از لیست کم میشن. نمیخوام از فایل استفاده که حداقل بصورت متنی که قابل مشاهده باشه. بنظر شما باید چیکار کنم کاری که انجام دادم درسته یا راه بهتری سراغ دارین برای انجام اینکار. 

با سلام

چیزی که شما نیاز دارید ذخیره اطلاعات هست حالا روش های متفاوتی هست که پیشنهاد من دیتابیس هست و میتونید از پلاگین کیوت برای اس کیو ال استفاده کنید و برای این که به صورت عادی باز نشه هم میتونید از Qt SQL driver plugin for SQLCipher استفاده کنید برای رمز نگاری دیتابیستون.

موفق باشید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
ارسال شده در (ویرایش شده)
در 2 ساعت قبل، بهنام صباغی گفته است :

با سلام

چیزی که شما نیاز دارید ذخیره اطلاعات هست حالا روش های متفاوتی هست که پیشنهاد من دیتابیس هست و میتونید از پلاگین کیوت برای اس کیو ال استفاده کنید و برای این که به صورت عادی باز نشه هم میتونید از Qt SQL driver plugin for SQLCipher استفاده کنید برای رمز نگاری دیتابیستون.

موفق باشید.

سلام ممنون بابت همراهیتون اطلاعات زیادی در مورد کار با دیتابیس ندارم ولی اگه راه آسون تری پیدا نکردم حتما استفاده میکنم. و باز هم مزاحمتون میشم.

ویرایش شده در توسط mousa1994

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 3 ساعت قبل، miladrahbari گفته است :

سلام

میتونی از qsettings استفاده کنی و اطلاعاتت رو توش بریزی

 

سلام توی فرمهای خارجی هم یه نمونه دیدم که میگفت میتونیم از QSettings استفاده کنیم من هم طبق همون پیشرفتم ولی کار نکرد شاید هم من درست استفاده نکردم. میتونید یه مثال برام بزنید که اول برنامه لیست رو از QSettings بخونه و موقع بستن برنامه دوباره همون لیست رو توی QSettings ذخیره کنه

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • -1

سلام

میتونی از qsettings استفاده کنی و اطلاعاتت رو توش بریزی

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...