logo

Ma’lumotlarni chop etishni dasturlash.

Загружено в:

08.08.2023

Скачано:

0

Размер:

294.431640625 KB
Mavzu:  Ma’lumotlarni chop etishni dasturlash.
Reja:
1. QPrintdialog va QPrinter  sinfi haqida ma’lumot.
2. Hisobotlar yaratish jarayonini dasturlash.
  1. QPrintdialog va QPrinter  sinfi haqida ma’lumot.
Ko'pgina   hollarda,   ilovalar   foydalanuvchiga   chop   etish   imkoniyatini   berishi
kerak.   Ushbu   holat   ko'plab   ishlab   chiqaruvchilarni   qo'rqitishi   mumkin   va   buning
sababi bir qator muammolar: printerlarning turli xil imkoniyatlari, displeydagi farq
ekran   va   printer   shriftlari,   printerni   dasturlashdagi   platformaga   xos   farqlar   va
boshqalar.Qt  ko'pgina  vazifalarni  o'z  zimmasiga  oladi,  bu  esa   ishlab  chiquvchilar
uchun juda osonlashadi.
QPrinter sinfi
QPrinter   klassi   bosib   chiqarish   uchun   asosiy   hisoblanadi.   Sinf
QPaintDevice-dan   meros   bo'lib   o'tganligi   sababli,   bosib   chiqarish   ko'rsatishga
o'xshaydi.   QPainter   sinfining   bir   xil   usullaridan   barcha   boshqa   chizilgan
kontekstlardagidek printerga bosib chiqarish uchun foydalanish mumkin.
QPrinter   printer   sinfida   QPaintDevice   sinfidan   meros   qolgan   boshqa   sinflarga
qaraganda ko'proq xususiylashtirishlar mavjud. Siz, masalan, varaq hajmini, nusxa
sonini   va   boshqalarni   belgilashingiz   mumkin.   Qt   foydalanuvchi   kerakli
sozlamalarni o'rnatadigan bosma dialogni taqdim etadi. Ushbu oyna QPrintDialog
sinfida amalga oshiriladi
Ushbu sozlamalar dasturiy jihatdan ham amalga oshirilishi mumkin:
The   setOrientation   ()   usulidan   foydalanib,   sahifaning   yo'nalishini   QPrinter   ::
Portret bayrog'ini gorizontal yoki QPrinter :: Landshaftni vertikal joylashuvi uchun
o'tkazib o'rnatishingiz mumkin;
Set setNumCopies () usuli bosib chiqariladigan nusxalar sonini belgilaydi;
Set   setFromTo   ()   usuli   yordamida   siz   bosib   chiqarish   uchun   sahifalar   oralig'ini
o'rnatishingiz mumkin;
Set   setColorMode   ()   usuli   rangli   va   qora   va   oq   rangli   bosib   chiqarish   rejimlarini
boshqaradi.   Rangli   rejim   uchun   siz   QPrinter   ::   Color   bayrog'ini   usulga
o'tkazishingiz kerak, va oq-qora uchun - QPrinter :: Grayscale;
The   varaqning   kattaligi   setPageSize   ()   usulini   chaqirish   orqali   o'zgartiriladi.
Jadvalda keltirilgan qiymatlardan biri usulga o'tkazilishi kerak.
Jadval. QPrinter sinfining PageSize qiymatlari Printerga   chop   etish   o'rniga,   chiqishni   faylga   yo'naltirishingiz   mumkin.
Buning   uchun   to'liq   malakali   fayl   nomini   setOutputFileName   ()   uslubiga
o'tkazishingiz   kerak.   Agar   siz   bo'sh   satrni   usulga   o'tkazsangiz,   chiqishni   faylga
qayta   yo'naltirish   e'tiborga   olinmaydi   va   chiqarilgan   narsa   bosib   chiqarish
moslamasiga   yuboriladi.   Chop   etiladigan   faylning   nomi   setDocName   ()   usuli
yordamida   o'rnatilishi   mumkin;bu   chop   etish   yo'naltirilgan   faylning   nomi   emas,
balki bosib chiqarish ishining nomi ekanligini unutmang.
Printer buyruqlarini o'z ichiga olgan faylga bosib chiqarishni qayta yo'naltirishdan
tashqari, siz PDF (Portable Document Format) fayllarini yaratishingiz mumkin va
bu   bosib   chiqarish   kabi   oddiy:   QPrinter   qiymatini   setOutputFormat   ()   usuliga
o'tkazishingiz kerak:: PdfFormat.
QPrinter   sinfida   xujjat   xujjatiga   shriftlarni   kiritish   uchun
setFontEmdeddingEnabled   ()   usuli   mavjud,   natijada   olingan   fayl   barcha   kerakli
shriftlarni   o'z   ichiga   oladi.   Agar   ular   yaratilgan   platformadan   boshqa   fayllardan
foydalanmoqchi bo'lsangiz, bu foydali bo'ladi.
Bosib   chiqarish   operatsiyasini   bekor   qilish   uchun   bekor   qilish   natijasini
ko'rsatadigan mantiqiy qiymatni qaytaradigan abort () usulini chaqiring.
Qt printer sozlamalari dialog oynasi
Ushbu   oyna   sizga   printerni   tanlash,   uning   sozlamalarini   o'zgartirish   va   bosib
chiqarish   uchun   sahifalar   oralig'ini   sozlash   imkonini   beradi.   Printer   sozlamalari
dialog oynasi QPrintDialog sinfida amalga oshiriladi, ammo uni QPrinter sinfining printer   ob'ektidan   alohida   chaqirish   mantiqiy   emas,   chunki   asosiy   vazifa   bu
ob'ektni bosib chiqarish uchun sozlashdir. Masalan; misol uchun:
QPrinter printer; 
QPrintDialog* pPrintDialog = new QPrintDialog(sprinter); 
if (pPrintDialog->exec() — QDialog::Accepted) { 
     // Печать 
} 
delete pPrintDialog;
Bosib chiqarish moslamasiga chiqish
Qt-dagi   bosma   qurilmaga   bosib   chiqarish   QWidget,   QPixmap   yoki   QImage-dan
rasmga o'xshaydi. Jarayon quyidagicha bo'ladi:
1. QPrinter ob'ektini bo'yoq moslamasi sifatida yarating.
2.   QPrintDialog   bosib   chiqarish   dialog   oynasini   ko'rsating,   bu   foydalanuvchiga
bosib chiqarish moslamasini  tanlashga va bosib chiqarishning ba'zi parametrlarini
o'rnatishga imkon beradi.
3. QPrinter bilan ishlash uchun QPainter ob'ektini yarating.
4. QPainter yordamida sahifani chizish.
5. Keyingi sahifaga o'tish uchun QPrinter :: newPage () funktsiyasini chaqiring.
6. Barcha sahifalar chop etilgunga qadar 4 va 5-bosqichlarni takrorlang.
Windows   va   Mac   OS   X   operatsion   tizimlarida   QPrinter   tizim   printerlari
drayverlaridan   foydalanadi.   Unix-da   u   PostScript   faylini   yaratadi   va   uni   lp   yoki
lpr-ga (yoki QPrinter :: setPrintProgram () tomonidan o'rnatilgan boshqa dasturga) uzatadi.   QPrinter   setOutputFormat   (QPrinter   ::   PdfFormat)   ni   chaqirish   orqali
PDF-fayllarni yaratish uchun ham ishlatilishi mumkin.
Bir sahifali oddiy bosib chiqarish misolini ko'rib chiqamiz. Birinchi misol QImage
ob'ektini chiqaradi:
2. Hisobotlar yaratish jarayonini dasturlash.
Bosib chiqarish moslamasiga chiqish Qt-dagi bosma qurilmaga bosib chiqarish
QWidget,   QPixmap   yoki   QImage-dan   rasmga   o'xshaydi.   Jarayon   quyidagicha
bo'ladi:
1. QPrinter ob'ektini bo'yoq moslamasi sifatida yarating.
2.   QPrintDialog   bosib   chiqarish   dialog   oynasini   ko'rsating,   bu   foydalanuvchiga
bosib chiqarish moslamasini  tanlashga va bosib chiqarishning ba'zi parametrlarini
o'rnatishga imkon beradi.
3. QPrinter bilan ishlash uchun QPainter ob'ektini yarating.
4. QPainter yordamida sahifani chizish.
5. Keyingi sahifaga o'tish uchun QPrinter :: newPage () funktsiyasini chaqiring.
6. Barcha sahifalar chop etilgunga qadar 4 va 5-bosqichlarni takrorlang.
Windows   va   Mac   OS   X   operatsion   tizimlarida   QPrinter   tizim   printerlari
drayverlaridan   foydalanadi.   Unix-da   u   PostScript   faylini   yaratadi   va   uni   lp   yoki
lpr-ga (yoki QPrinter :: setPrintProgram () tomonidan o'rnatilgan boshqa dasturga)
uzatadi.   QPrinter   setOutputFormat   (QPrinter   ::   PdfFormat)   ni   chaqirish   orqali
PDF-fayllarni yaratish uchun ham ishlatilishi mumkin.
Bir sahifali oddiy bosib chiqarish misolini ko'rib chiqamiz. Birinchi misol QImage
ob'ektini chiqaradi:
void PrintWindow::printImage(const Qlmage &image)
{
QPrintDialog printDialog(&printer, this);
if (printDialog.exec()) {
QPainter painter(&printer);
QRect rect = painter.viewport();
QSize size = image.size(); size.scale(rect.size(), Qt::KeepAspectRatio);
painter.setViewport(rect.x(). rect.y(), size.width(), size.height());
painter.setWindow (image.rect());
painter.drawImage(0, 0, image);
}
}
#include <QtGui>
#include "Printer.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QWidget wgt;
Printer* pprinter = new Printer;
QPushButton* pcmd = new QPushButton("&Print");
QObject::connect(pcmd, SIGNAL(clicked()),
pprinter, SLOT(slotPrint())
);
//Layout setup
QVBoxLayout* pvbxLayout = new QVBoxLayout;
pvbxLayout->setMargin(0);
pvbxLayout->setSpacing(0);
pvbxLayout->addWidget(pprinter);
pvbxLayout->addWidget(pcmd);
wgt.setLayout(pvbxLayout);
wgt.resize(250, 320);
wgt.show();
return app.exec();
} Listingdagi   dastur   printer   vidjetlarini   (Listing   5-6   da   tasvirlangan   Printer   sinf
ob'ektiga   pprinter   ko'rsatgichi)   va   tugmachalarni   (pcmd   ko'rsatkichi)   yaratadi.
Tugma   vidjetining   bosilgan   ()   signali   printer   vidjetining   slotPrint   ()   uyasiga
ulangan.
#ifndef _Printer_h_
#define _Printer_h_
#include <QWidget>
class QPrinter;
class QPaintDevice;
class Printer : public QWidget {
Q_OBJECT
private:
QPrinter* m_pprinter;
protected:
virtual void paintEvent(QPaintEvent* pe );
void draw (QPaintDevice* ppd);
public:
Printer(QWidget* pwgt = 0);
virtual ~Printer();
public slots:
void slotPrint();
};
#endif //_Printer_h_
Ro'yxatda   ko'rsatilgan   Printer   sinfining   ta'rifi   QPrinter   printer   ob'ektiga
ko'rsatgichni o'z ichiga oladi. Draw () usuli chizilgan kontekstiga ko'rsatgich oladi.
Sinf   printer   ob'ekti   uchun   dinamik   ravishda   ajratilgan   xotirani   bo'shatadigan
destruktorni   belgilaydi.   SlotPrint()   uyasi   bosma   qurilmaga   chiqishni   amalga
oshirish uchun chaqiriladi.            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. Профессионаdное программирование на С++. - СПб.:
БХВ-Петербург, 2018. - 1072 с.

Mavzu: Ma’lumotlarni chop etishni dasturlash. Reja: 1. QPrintdialog va QPrinter sinfi haqida ma’lumot. 2. Hisobotlar yaratish jarayonini dasturlash.

1. QPrintdialog va QPrinter sinfi haqida ma’lumot. Ko'pgina hollarda, ilovalar foydalanuvchiga chop etish imkoniyatini berishi kerak. Ushbu holat ko'plab ishlab chiqaruvchilarni qo'rqitishi mumkin va buning sababi bir qator muammolar: printerlarning turli xil imkoniyatlari, displeydagi farq ekran va printer shriftlari, printerni dasturlashdagi platformaga xos farqlar va boshqalar.Qt ko'pgina vazifalarni o'z zimmasiga oladi, bu esa ishlab chiquvchilar uchun juda osonlashadi. QPrinter sinfi QPrinter klassi bosib chiqarish uchun asosiy hisoblanadi. Sinf QPaintDevice-dan meros bo'lib o'tganligi sababli, bosib chiqarish ko'rsatishga o'xshaydi. QPainter sinfining bir xil usullaridan barcha boshqa chizilgan kontekstlardagidek printerga bosib chiqarish uchun foydalanish mumkin. QPrinter printer sinfida QPaintDevice sinfidan meros qolgan boshqa sinflarga qaraganda ko'proq xususiylashtirishlar mavjud. Siz, masalan, varaq hajmini, nusxa sonini va boshqalarni belgilashingiz mumkin. Qt foydalanuvchi kerakli sozlamalarni o'rnatadigan bosma dialogni taqdim etadi. Ushbu oyna QPrintDialog sinfida amalga oshiriladi Ushbu sozlamalar dasturiy jihatdan ham amalga oshirilishi mumkin: The setOrientation () usulidan foydalanib, sahifaning yo'nalishini QPrinter :: Portret bayrog'ini gorizontal yoki QPrinter :: Landshaftni vertikal joylashuvi uchun o'tkazib o'rnatishingiz mumkin; Set setNumCopies () usuli bosib chiqariladigan nusxalar sonini belgilaydi; Set setFromTo () usuli yordamida siz bosib chiqarish uchun sahifalar oralig'ini o'rnatishingiz mumkin; Set setColorMode () usuli rangli va qora va oq rangli bosib chiqarish rejimlarini boshqaradi. Rangli rejim uchun siz QPrinter :: Color bayrog'ini usulga o'tkazishingiz kerak, va oq-qora uchun - QPrinter :: Grayscale; The varaqning kattaligi setPageSize () usulini chaqirish orqali o'zgartiriladi. Jadvalda keltirilgan qiymatlardan biri usulga o'tkazilishi kerak. Jadval. QPrinter sinfining PageSize qiymatlari

Printerga chop etish o'rniga, chiqishni faylga yo'naltirishingiz mumkin. Buning uchun to'liq malakali fayl nomini setOutputFileName () uslubiga o'tkazishingiz kerak. Agar siz bo'sh satrni usulga o'tkazsangiz, chiqishni faylga qayta yo'naltirish e'tiborga olinmaydi va chiqarilgan narsa bosib chiqarish moslamasiga yuboriladi. Chop etiladigan faylning nomi setDocName () usuli yordamida o'rnatilishi mumkin;bu chop etish yo'naltirilgan faylning nomi emas, balki bosib chiqarish ishining nomi ekanligini unutmang. Printer buyruqlarini o'z ichiga olgan faylga bosib chiqarishni qayta yo'naltirishdan tashqari, siz PDF (Portable Document Format) fayllarini yaratishingiz mumkin va bu bosib chiqarish kabi oddiy: QPrinter qiymatini setOutputFormat () usuliga o'tkazishingiz kerak:: PdfFormat. QPrinter sinfida xujjat xujjatiga shriftlarni kiritish uchun setFontEmdeddingEnabled () usuli mavjud, natijada olingan fayl barcha kerakli shriftlarni o'z ichiga oladi. Agar ular yaratilgan platformadan boshqa fayllardan foydalanmoqchi bo'lsangiz, bu foydali bo'ladi. Bosib chiqarish operatsiyasini bekor qilish uchun bekor qilish natijasini ko'rsatadigan mantiqiy qiymatni qaytaradigan abort () usulini chaqiring. Qt printer sozlamalari dialog oynasi Ushbu oyna sizga printerni tanlash, uning sozlamalarini o'zgartirish va bosib chiqarish uchun sahifalar oralig'ini sozlash imkonini beradi. Printer sozlamalari dialog oynasi QPrintDialog sinfida amalga oshiriladi, ammo uni QPrinter sinfining

printer ob'ektidan alohida chaqirish mantiqiy emas, chunki asosiy vazifa bu ob'ektni bosib chiqarish uchun sozlashdir. Masalan; misol uchun: QPrinter printer; QPrintDialog* pPrintDialog = new QPrintDialog(sprinter); if (pPrintDialog->exec() — QDialog::Accepted) { // Печать } delete pPrintDialog; Bosib chiqarish moslamasiga chiqish Qt-dagi bosma qurilmaga bosib chiqarish QWidget, QPixmap yoki QImage-dan rasmga o'xshaydi. Jarayon quyidagicha bo'ladi: 1. QPrinter ob'ektini bo'yoq moslamasi sifatida yarating. 2. QPrintDialog bosib chiqarish dialog oynasini ko'rsating, bu foydalanuvchiga bosib chiqarish moslamasini tanlashga va bosib chiqarishning ba'zi parametrlarini o'rnatishga imkon beradi. 3. QPrinter bilan ishlash uchun QPainter ob'ektini yarating. 4. QPainter yordamida sahifani chizish. 5. Keyingi sahifaga o'tish uchun QPrinter :: newPage () funktsiyasini chaqiring. 6. Barcha sahifalar chop etilgunga qadar 4 va 5-bosqichlarni takrorlang. Windows va Mac OS X operatsion tizimlarida QPrinter tizim printerlari drayverlaridan foydalanadi. Unix-da u PostScript faylini yaratadi va uni lp yoki lpr-ga (yoki QPrinter :: setPrintProgram () tomonidan o'rnatilgan boshqa dasturga)

uzatadi. QPrinter setOutputFormat (QPrinter :: PdfFormat) ni chaqirish orqali PDF-fayllarni yaratish uchun ham ishlatilishi mumkin. Bir sahifali oddiy bosib chiqarish misolini ko'rib chiqamiz. Birinchi misol QImage ob'ektini chiqaradi: 2. Hisobotlar yaratish jarayonini dasturlash. Bosib chiqarish moslamasiga chiqish Qt-dagi bosma qurilmaga bosib chiqarish QWidget, QPixmap yoki QImage-dan rasmga o'xshaydi. Jarayon quyidagicha bo'ladi: 1. QPrinter ob'ektini bo'yoq moslamasi sifatida yarating. 2. QPrintDialog bosib chiqarish dialog oynasini ko'rsating, bu foydalanuvchiga bosib chiqarish moslamasini tanlashga va bosib chiqarishning ba'zi parametrlarini o'rnatishga imkon beradi. 3. QPrinter bilan ishlash uchun QPainter ob'ektini yarating. 4. QPainter yordamida sahifani chizish. 5. Keyingi sahifaga o'tish uchun QPrinter :: newPage () funktsiyasini chaqiring. 6. Barcha sahifalar chop etilgunga qadar 4 va 5-bosqichlarni takrorlang. Windows va Mac OS X operatsion tizimlarida QPrinter tizim printerlari drayverlaridan foydalanadi. Unix-da u PostScript faylini yaratadi va uni lp yoki lpr-ga (yoki QPrinter :: setPrintProgram () tomonidan o'rnatilgan boshqa dasturga) uzatadi. QPrinter setOutputFormat (QPrinter :: PdfFormat) ni chaqirish orqali PDF-fayllarni yaratish uchun ham ishlatilishi mumkin. Bir sahifali oddiy bosib chiqarish misolini ko'rib chiqamiz. Birinchi misol QImage ob'ektini chiqaradi: void PrintWindow::printImage(const Qlmage &image) { QPrintDialog printDialog(&printer, this); if (printDialog.exec()) { QPainter painter(&printer); QRect rect = painter.viewport(); QSize size = image.size();