logo

Ma’lumotlar buferi bilan ishlash. Tezkor panellar.

Yuklangan vaqt:

08.08.2023

Ko'chirishlar soni:

0

Hajmi:

84.89453125 KB
Mavzu:  Ma’lumotlar buferi bilan ishlash. Tezkor panellar.
Reja:
1. Ma’lumotlar buferi bilan bog’liq jarayonlarni dasturlash. 
2. Ish muhiti va tezkor panellar tushunchasi.Ish muhiti va tezkor panellar bilan
bog’liq jarayonlarni dasturlash. 
3. QSystemtrayicon sinfi haqida.
  1. Ma’lumotlar buferi bilan bog’liq jarayonlarni dasturlash.
Kompyuterda ishlashda foydalanuvchilar ko'pincha bir nechta dasturlar bilan
ishlaydi   va   ular   o'rtasida   ma'lumotlar   almashinuvi   zarur.   Ushbu   imkoniyatni
qo'llab-quvvatlash   uchun   ikkita   keng   tarqalgan   texnologiyalar   mavjud:   buferdan
foydalanish va moslamalarni sudrab olib tashlash. Shuni ta'kidlash kerakki, ushbu
texnologiyalar   ko'pincha  dasturlar   o'rtasida  ma'lumotlar  almashinuvi   uchun  emas,
balki faqat bitta dasturda ishlashda qo'llaniladi.
Bufer
Bufer turli xil ilovalar o'rtasida ma'lumot almashish imkoniyatini beradi. Bu
ma'lumotlarni   bitta   dasturdan   boshqasiga   nusxalashning   eng   mashhur   usullaridan
biridir.   Bu   tizimda   ishlaydigan   barcha   ilovalar   kirish   imkoniyatiga   ega   bo'lgan
xotira   sohasi.   Ularning   har   biri   buferga   ma'lumot   yozishi   yoki   o'qishi   mumkin.
Bufer   dasturlari   standart   buyruqlarni   ta'minlashi   kerak:   qirqish,   nusxalash   va
joylashtirish   va   bu   buyruqlar   foydalanuvchi   ishini   tezlashtirish   uchun   maxsus
tugmachalarni  birikmalar  bilan ta'minlanishi  kerak:  <Ctrl> + <X>, <Ctrl> + <C>
va <Ctrl>+ <V>.
Bufer bilan ishlash uchun Qt da Qclipboard sinfidan foydalanadi. Siz ushbu
sinfning   ob'ektini   yaratishga   urinmasligingiz   kerak,   chunki   u   dastur   ishga
tushganda   avtomatik   ravishda   yaratiladi   va   faqat   birlikdagi   dasturda   bo'lishi
mumkin. QClipboard sinfi har safar dasturlardan biri buferga yangi ma'lumotlarni
joylashtirganda   dataChanged()   signalini   yuboradi.   Agar   buferga   joylashtirilgan
ma'lumotlarni   boshqarish   zarur   bo'lsa,   u   holda   bu   signal   mos   keladigan   uyaga
ulanadi. Masalan:
connect(qApp-
>clipboard(),SIGNAL(dataChanged()),pwgt,SLOT(slotDataControl()));
Ma'lumotlar   buferga   setText()   usuli   yordamida   joylashtirilishi   mumkin,
setPixmap(),setImage() или setMimeData().Masalan:
QClipboard* pcb = QApplication::clipboard();
pcb->setText("My Text"); SetMimeData   ()   usulidan   foydalanib,   buferga   istalgan   turdagi   ma'lumotlarni
kiritishingiz mumkin.
Usul   QMimeSource   sinfidan   meros   bo'lib   o'tgan   sinf   ob'ektiga   ko'rsatgichni
qabul qiladi.
QMimeSource - bu boshqa formatlarga o'tkazilishi mumkin bo'lgan ma'lumotlar
turlari uchun asos bo'lgan mavhum sinf.
Matn(),   image(),   pixmap()   va   mimeData()   usullaridan   foydalangan   holda
ma'lumotlar almashish buferidan olinadi. Masalan:
QClipboard* pcb = QApplication::clipboard();
QString str = pcb->text();
if (!str.isNull()) {
qDebug() << "Clipboard Text: " << str;
}
2.QSystemtrayicon sinfi haqida.
Uning   ishlatilishi   juda   sodda.   Belgini   o'rnatish   uchun   setIcon   ()   usulini
chaqiring   va   uni   bildirishnoma   maydonida   ko'rsatish   uchun   show   ()   usulini
chaqiring.   Agar   sizga   foydalanuvchiga   xabarni   ko'rsatish   kerak   bo'lsa,   u   holda
showMessage() usulini chaqirishingiz kerak.
Shuningdek,   setToolTip   ()   usuli   yordamida   foydalanuvchi   uchun
sichqonchani   dasturingiz   piktogrammasi   ustiga   qo'yib,   uning   nomini   va   ehtimol
uning   holati   to'g'risida   ma'lumotni   ko'rishi   uchun   foydalanuvchi   uchun   ko'rsatma
o'rnatish   maqsadga   muvofiqdir.   Va,   albatta,   aksariyat   hollarda,   sizning
bildirishnoma   maydonidan   o'zingizning   dasturingiz   bilan   ishlash   uchun   kontekst
menyusini o'rnatishingiz kerak bo'lishi mumkin. Buning uchun
setContextMenu   ()   usuli   taqdim   etiladi.Keling,   oddiy   dastur   yozish   orqali   ilgari
aytilgan barcha imkoniyatlarni tasvirlab beraylik.
Ushbu   dasturda   foydalanuvchi   quyidagi   buyruqlarni   tanlashi   mumkin   bo'lgan
kontekst menyusi mavjud:
Application   Ilova   oynasini   ko'rsatish   /   yashirish   -   Shaklda   ko'rsatilgandek
ko'rsatiladi. 7 oyna. Agar oyna ilgari ko'rinadigan bo'lsa, u holda u yashirin bo'ladi;   Show Message(xabar) - rasmda ko'rsatilgan xabarni ko'rsatadi. 
  Change Icon(iconka fayli) - qor rasmini yulduzcha va aksincha o'zgartiradi;
   Quit (Chiqish) .
                     7 -rasm                                                                  8 -rasm
                           9-rasm                                                                   10-rasm
1. Ish   muhiti   va   tezkor   panellar   tushunchasi.Ish   muhiti   va   tezkor   panellar
bilan bog’liq jarayonlarni dasturlash.
#include <QtGui>
#include "SystemTray.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
SystemTray st;
QApplication::setQuitOnLastWindowClosed(false);
return app.exec();
}
Listing 7-dagi asosiy dasturda biz shunchaki vidjet yaratamiz. Ilova oynasini
yopish hech qachon dasturimizni tugatmasligi kerakligi sababli biz QApplication ::
setQuitOnLastWindow   ()   statik   usulini   chaqiramiz   va   unga   noto'g'ri   ma'lumot
beramiz.  Qt-ning  vidjet  oynalari   sukut  bo'yicha   ko'rinmaydi,   bu  juda   zo'r,  chunki
umuman,   bildirishnoma   maydoni   uchun   mo'ljallangan   dasturlar,   ushbu   sohada ishga   tushirilgandan   so'ng,   faqat   ularning   belgisini   ko'rsatadi   va   derazalari   yo'q.
Shu sababli, asosiy dastur odatdagi show() usulidagi chaqiruvga ega emas.
Файл SystemTray.h
#ifndef _SystemTray_h_
#define _SystemTray_h_
#include <QLabel>
class QSystemTrayIcon;
class QMenu;
class SystemTray : public QLabel {
Q_OBJECT
private:
QSystemTrayIcon* m_ptrayIcon;
QMenu* m_ptrayIconMenu;
bool m_bIconSwitcher;
protected:
virtual void closeEvent(QCloseEvent*);
public:
SystemTray(QWidget* pwgt = 0);
public slots:
void slotShowHide ();
void slotShowMessage();
void slotChangeIcon ();
};
Listing   7-dagi   sarlavha   faylida   biz   dasturimiz   uchun   oyna   sinfini   aniqlaymiz.
Yorliqni ko'rsatish uchun u QLabel sinfidan meros qilib olinadi.
Bizning sinf uchta xususiyatni o'z ichiga oladi:
   bizga   bildirishnoma   maydonidan   foydalanish   imkoniyatini   beradigan
QSystemTrayIcon ob'ekti (m_ptrayIcon ko'rsatkichi);
   kontekst   menyusini   amalga   oshirish   uchun   zarur   bo'lgan   QMenu   vidjeti
(m_ptrayIconMenu ko'rsatkichi); _   Mantiqiy   turdagi   m_bIconSwitcher   o'zgaruvchisi,   biz   raster   tasvirlarning
o'zgarishini boshqarishimiz kerak.
Biz   oynani   yopish   hodisasining   closeEvent()   usulini   haddan   tashqari   yukladik,
chunki bizning dasturimiz unga boshqacha munosabatda bo'lishi kerak.
Uchta   slot,   slotShowHide   (),   slotShowMessage   ()   va   slotChangeIcon   ()   kontekst
menyusi buyruqlarini bajaradi.
SlotChangeIcon   ()   uyasi   Change   Icon   buyrug'iga   tayinlangan   va   bildirishnoma
maydonida bitmap-ni o'rnatish uchun mo'ljallangan. Uni chaqirganda biz har doim
mantiqiy   o'zgaruvchining   m_bIconSwitcher   qiymatini   o'zgartiramiz   va   uning
holatiga   qarab   img1.bmp   yoki   img2.bmp   ikkita   bitmapalaridan   birini   qo'llaymiz.
Keyin setIcon () usulini chaqirish orqali uni bildirishnoma maydoniga o'rnatamiz.
Ekran vidjeti
QDesktopWidget   klassi   ekranning   grafik   ma'lumot   tarkibiga   kirish   uchun
javobgardir.
Bundan   tashqari,   ushbu   sinf   sizning   ilovangiz   oynasini   to'g'ri   joylashtirish
uchun   juda   foydali   bo'lishi   mumkin,   chunki   foydalanuvchi   turli   xil   ekran
o'lchamlarini   ishlatishi   mumkin.   Ushbu   vidjet   faqat   bitta   nusxada   mavjud   va   uni
yaratish   mumkin   emas,   lekin   siz   unga   ko'rsatgich   olishingiz   mumkin.   Bunga
QApplication   sinfida   aniqlangan   statik   desktop   ()   usulini   chaqirish   orqali
erishiladi.   Shunday   qilib,   sizning   oynangizni   ekranning   o'rtasida   aniq   ko'rsatish
uchun siz quyidagilarni qilishingiz mumkin:
1.   QApplication   ::   desktop   ()   ga   murojaat   qilib   ekran   vidjetiga   ko'rsatgich
oling.
2.   width   ()   va   height   ()   usullaridan   foydalanib,   joriy   ekran   o'lchamlarini
aniqlang.
3. Ilova oynasining joriy o'lchamlari va o'lchamlariga (deraza vidjetining o'zi
kengligi) va balandligi () muvofiq oynaning o'rtadagi holatini hisoblang.
4. move () usulini chaqirish orqali uni o'rnating.
Bularning barchasi bitta dastur satrida amalga oshirilishi mumkin:
pwgt->move((QApplication::desktop()->width() — pwgt->width()) / 2, (QApplication::desktop()->height() — pwgt->height()) / 2);
Bundan tashqari, ushbu sinf tizimdagi monitorlar soni, ularning o'lchamlari
haqida   ma'lumot   beradi   va   vidjetning   ma'lum   bir   pikseli   joylashgan   ekranni
qaytarishi mumkin.
Bu   juda   foydali   bo'lishi   mumkin,   masalan,   vidjetlarning   koordinatalarini   ular
joylashgan monitorlar bilan birga sozlamalarda saqlash uchun, keyinchalik hamma
narsani avvalgi holatiga qaytarish uchun.
  numScreens () - tizim monitorlari sonini qaytaradi;
  primaryScreen () - asosiy qilib tuzilgan monitor sonini qaytaradi;
   isVirtualDesktop   ()   -   virtual   ish   stoli   rejimini   tanib   olishga   imkon   beradi.
Virtual ish stoli holatida bir nechta monitor bitta birlik sifatida ishlatiladi,
va  dastur  oynasi   bir  monitordan  ikkinchisiga  o'tishi   va  darhol   bir  vaqtning  o'zida
boshqa monitorda bo'lishi mumkin;
  screenNumber () - koordinatalarni (QPoint ob'ekti) argument sifatida qabul qiladi
va   shu   koordinatali   piksel   joylashgan   monitor   sonini   qaytaradi.   Masalan;   misol
uchun:
int nScreen = desktopWidget-> screenNumber (QPoint (320, 115));
Ekranlarning   har   biridan   ekran   raqamini   QDesktopWidget   ::   screenGeometry   ()
usuliga   o'tkazib,   mos   ravishda   width   ()   va   height   ()   usullarini   chaqirish   orqali
hozirgi   gorizontal   va   vertikal   o'lchamlarini   so'rash   mumkin.   Quyidagi   misol
tizimda mavjud bo'lgan barcha monitorlarni joriy o'lchamlari bilan aks ettiradi:
QDesktopWidget* pwgt = QApplication::desktop();
for (int i = 0; i < pwgt->numScreens(); ++i) {
qDebug() << "Screen:" << i;
qDebug() << "width:" << pwgt->screenGeometry(i).width();
qDebug() << "height:" << pwgt->screenGeometry(i).height();
}
Agar   foydalanuvchi   ekranlardan   birining   piksellar   sonini   o'zgartirsa,
QDesktopWidget   klassi   ekranning   raqamini   o'zgartirgan()   signalni   yuboradi   va ishlatilayotgan   monitorlar   soni   o'zgarganda,   screenCountChanged()   signali
yuboriladi.
Endi   ekranning   grafik   ma'lumotlariga   kirish   imkoniyatiga   qaytamiz.   Uni
Capture   Screen   tugmachasini   bosganingizda   kompyuter   ekranidan   skrinshotlarni
oladigan   va   olingan   tasvirni   darhol   ko'rsatadigan   dastur   (9-rasm)   misolida
ko'rsatish mumkin.
Листинг 8. Файл main.cpp
#include <QtGui>
#include "GrabWidget.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
GrabWidget wgt;
wgt.show();
return app.exec();
}            Foydalanilgan ea dabiyotlar ro’yxati
1. Sh.A.Nazirov, R.V.Qobulov, M.R.Babajanov «C va C++ TILI»
2. Informatika fanidan o’quv qo’llanma //TATU 489 b. Toshkent, 2012.
3. C / C ++.   Программирование   на   языке   высокого   уровня   /   Т.   А.
Павловская. — СПб.:Питер, 2003. —461 с: ил.
4. Программирование на языке С++ в среде  Qt   Creator :
5. / Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк,О. В. Чеснокова,
6. А. С. Чмыхало — М. :  ALT   Linux , 2015. — 448 с.
7. Жасмин   Бланшет,   Марк   Саммерфилд   Qt   4:Программирование   GUI   на
C ++
8. М.Шлее,  Qt  5.10. Профессиональное программирование на С++. - СПб.:
БХВ-Петербург, 2018. - 1072 с.

Mavzu: Ma’lumotlar buferi bilan ishlash. Tezkor panellar. Reja: 1. Ma’lumotlar buferi bilan bog’liq jarayonlarni dasturlash. 2. Ish muhiti va tezkor panellar tushunchasi.Ish muhiti va tezkor panellar bilan bog’liq jarayonlarni dasturlash. 3. QSystemtrayicon sinfi haqida.

1. Ma’lumotlar buferi bilan bog’liq jarayonlarni dasturlash. Kompyuterda ishlashda foydalanuvchilar ko'pincha bir nechta dasturlar bilan ishlaydi va ular o'rtasida ma'lumotlar almashinuvi zarur. Ushbu imkoniyatni qo'llab-quvvatlash uchun ikkita keng tarqalgan texnologiyalar mavjud: buferdan foydalanish va moslamalarni sudrab olib tashlash. Shuni ta'kidlash kerakki, ushbu texnologiyalar ko'pincha dasturlar o'rtasida ma'lumotlar almashinuvi uchun emas, balki faqat bitta dasturda ishlashda qo'llaniladi. Bufer Bufer turli xil ilovalar o'rtasida ma'lumot almashish imkoniyatini beradi. Bu ma'lumotlarni bitta dasturdan boshqasiga nusxalashning eng mashhur usullaridan biridir. Bu tizimda ishlaydigan barcha ilovalar kirish imkoniyatiga ega bo'lgan xotira sohasi. Ularning har biri buferga ma'lumot yozishi yoki o'qishi mumkin. Bufer dasturlari standart buyruqlarni ta'minlashi kerak: qirqish, nusxalash va joylashtirish va bu buyruqlar foydalanuvchi ishini tezlashtirish uchun maxsus tugmachalarni birikmalar bilan ta'minlanishi kerak: <Ctrl> + <X>, <Ctrl> + <C> va <Ctrl>+ <V>. Bufer bilan ishlash uchun Qt da Qclipboard sinfidan foydalanadi. Siz ushbu sinfning ob'ektini yaratishga urinmasligingiz kerak, chunki u dastur ishga tushganda avtomatik ravishda yaratiladi va faqat birlikdagi dasturda bo'lishi mumkin. QClipboard sinfi har safar dasturlardan biri buferga yangi ma'lumotlarni joylashtirganda dataChanged() signalini yuboradi. Agar buferga joylashtirilgan ma'lumotlarni boshqarish zarur bo'lsa, u holda bu signal mos keladigan uyaga ulanadi. Masalan: connect(qApp- >clipboard(),SIGNAL(dataChanged()),pwgt,SLOT(slotDataControl())); Ma'lumotlar buferga setText() usuli yordamida joylashtirilishi mumkin, setPixmap(),setImage() или setMimeData().Masalan: QClipboard* pcb = QApplication::clipboard(); pcb->setText("My Text");

SetMimeData () usulidan foydalanib, buferga istalgan turdagi ma'lumotlarni kiritishingiz mumkin. Usul QMimeSource sinfidan meros bo'lib o'tgan sinf ob'ektiga ko'rsatgichni qabul qiladi. QMimeSource - bu boshqa formatlarga o'tkazilishi mumkin bo'lgan ma'lumotlar turlari uchun asos bo'lgan mavhum sinf. Matn(), image(), pixmap() va mimeData() usullaridan foydalangan holda ma'lumotlar almashish buferidan olinadi. Masalan: QClipboard* pcb = QApplication::clipboard(); QString str = pcb->text(); if (!str.isNull()) { qDebug() << "Clipboard Text: " << str; } 2.QSystemtrayicon sinfi haqida. Uning ishlatilishi juda sodda. Belgini o'rnatish uchun setIcon () usulini chaqiring va uni bildirishnoma maydonida ko'rsatish uchun show () usulini chaqiring. Agar sizga foydalanuvchiga xabarni ko'rsatish kerak bo'lsa, u holda showMessage() usulini chaqirishingiz kerak. Shuningdek, setToolTip () usuli yordamida foydalanuvchi uchun sichqonchani dasturingiz piktogrammasi ustiga qo'yib, uning nomini va ehtimol uning holati to'g'risida ma'lumotni ko'rishi uchun foydalanuvchi uchun ko'rsatma o'rnatish maqsadga muvofiqdir. Va, albatta, aksariyat hollarda, sizning bildirishnoma maydonidan o'zingizning dasturingiz bilan ishlash uchun kontekst menyusini o'rnatishingiz kerak bo'lishi mumkin. Buning uchun setContextMenu () usuli taqdim etiladi.Keling, oddiy dastur yozish orqali ilgari aytilgan barcha imkoniyatlarni tasvirlab beraylik. Ushbu dasturda foydalanuvchi quyidagi buyruqlarni tanlashi mumkin bo'lgan kontekst menyusi mavjud: Application Ilova oynasini ko'rsatish / yashirish - Shaklda ko'rsatilgandek ko'rsatiladi. 7 oyna. Agar oyna ilgari ko'rinadigan bo'lsa, u holda u yashirin bo'ladi;

 Show Message(xabar) - rasmda ko'rsatilgan xabarni ko'rsatadi.  Change Icon(iconka fayli) - qor rasmini yulduzcha va aksincha o'zgartiradi;  Quit (Chiqish) . 7 -rasm 8 -rasm 9-rasm 10-rasm 1. Ish muhiti va tezkor panellar tushunchasi.Ish muhiti va tezkor panellar bilan bog’liq jarayonlarni dasturlash. #include <QtGui> #include "SystemTray.h" int main(int argc, char** argv) { QApplication app(argc, argv); SystemTray st; QApplication::setQuitOnLastWindowClosed(false); return app.exec(); } Listing 7-dagi asosiy dasturda biz shunchaki vidjet yaratamiz. Ilova oynasini yopish hech qachon dasturimizni tugatmasligi kerakligi sababli biz QApplication :: setQuitOnLastWindow () statik usulini chaqiramiz va unga noto'g'ri ma'lumot beramiz. Qt-ning vidjet oynalari sukut bo'yicha ko'rinmaydi, bu juda zo'r, chunki umuman, bildirishnoma maydoni uchun mo'ljallangan dasturlar, ushbu sohada

ishga tushirilgandan so'ng, faqat ularning belgisini ko'rsatadi va derazalari yo'q. Shu sababli, asosiy dastur odatdagi show() usulidagi chaqiruvga ega emas. Файл SystemTray.h #ifndef _SystemTray_h_ #define _SystemTray_h_ #include <QLabel> class QSystemTrayIcon; class QMenu; class SystemTray : public QLabel { Q_OBJECT private: QSystemTrayIcon* m_ptrayIcon; QMenu* m_ptrayIconMenu; bool m_bIconSwitcher; protected: virtual void closeEvent(QCloseEvent*); public: SystemTray(QWidget* pwgt = 0); public slots: void slotShowHide (); void slotShowMessage(); void slotChangeIcon (); }; Listing 7-dagi sarlavha faylida biz dasturimiz uchun oyna sinfini aniqlaymiz. Yorliqni ko'rsatish uchun u QLabel sinfidan meros qilib olinadi. Bizning sinf uchta xususiyatni o'z ichiga oladi:  bizga bildirishnoma maydonidan foydalanish imkoniyatini beradigan QSystemTrayIcon ob'ekti (m_ptrayIcon ko'rsatkichi);  kontekst menyusini amalga oshirish uchun zarur bo'lgan QMenu vidjeti (m_ptrayIconMenu ko'rsatkichi);