معرفی فریمورک اپلیکیشن نویسی Qt ‏(12)

حتما تابحال برنامه هایی رو دیدید که موقعی که میخوایم سیستم رو shutdown یا logoff بکنیم پیام میدن و مثلا میگن فایلهای شما save نشده و میخواید چکار کنید.
حداقل بعضی از این برنامه ها (مثلا نوتپد ویندوز) حتی این امکان رو هم میدن که عملیات shutdown یا logoff رو cancel کنیم.
شما میتونید بوسیلهء کیوت هم چنین امکانی رو در برنامه هاتون قرار بدید.
این یک نمونه کد و برنامهء ساده هست که چگونگی انجام اینکار رو نشون میده:

#include <QApplication>
#include <QMessageBox>
#include <QSessionManager>
#include <QLabel>

class MyApp : public QApplication
{
public:

MyApp(int argc, char *argv[]) : QApplication(argc, argv) {}

void commitData(QSessionManager& manager) {
if(manager.allowsErrorInteraction()) {
int ret = QMessageBox::warning(
0, "My Application", "Realy quit and shutdown/log off?", QMessageBox::Yes|QMessageBox::No
);
if(ret==QMessageBox::No) manager.cancel();
}
else {
// we did not get permission to interact, then
// do something reasonable instead
}
}
};

int main(int argc, char *argv[])
{
MyApp app(argc, argv);

QLabel lbl("This is my Qt application.");
lbl.show();

return app.exec();
}

همونطور که میبینید، ما تابع QApplication::commitData رو Reimplement کردیم.
برای آگاهی بیشتر به مستندات کیوت مراجعه کنید.
چند نکته که من در آزمایشهای خودم بدست آوردم اینهاست:
- این روش تنها برای شات داون یا لاگ آف از طریق محیط گرافیکی کار میکنه و مثلا اگر فرمان شات داون از خط فرمان فراخوانی شده باشه برنامه بدون امکان مقاومت بسته میشه.
- اگر برنامهء شما از نوع خط فرمان باشه یا اصولا در پس زمینه اجرا میشه، باید حداقل یک عنصر GUI در برنامتون قرار بدید تا این روش بازهم کار کنه. برای اینکه این جزء گرافیکی دیده نشه و در برنامه های خط فرمان یا مخفی و پس زمینهء ما اختلالی ایجاد نکنه من چنین ترفندی رو بکار گرفتم:

#include <QApplication>
...
#include <QSplashScreen>

class MyApp : public QApplication
{
...
};

int main(int argc, char *argv[])
{
MyApp app(argc, argv);

QSplashScreen* spl=new QSplashScreen;
spl->show();
delete spl;

return app.exec();
}

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>