Ma’lumotlarni chop etishni dasturlash.
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();