Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 73

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

04 QStringList args = app.arguments();

05 QString path = QDir::currentPath();

06 if (args.count() > 1)

07 path = args[1];

08 cout << "Space used by images in " << qPrintable(path)

09 << " and its subdirectories is "

10 << (imageSpace(path) / 1024) << " KB" << endl;

11 return 0;

12 }

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QDir::currentPath() для получСния ΠΏΡƒΡ‚ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QDir::homePath() для получСния домашнСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΊΠ°Π·Π°Π» ΠΏΡƒΡ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ. НаконСц, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ imageSpace() для расчСта Ρ€Π°Π·ΠΌΠ΅Ρ€Π° пространства, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ изобраТСниями.

Класс QDir содСрТит ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ entryInfoList() (которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² QFileInfo), rename(), exists(), mkdir() ΠΈ rmdir(). Класс QFile содСрТит нСсколько ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… статичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС remove() ΠΈ exists().

РСсурсы, Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Π΅ Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Π”ΠΎ сих ΠΏΠΎΡ€ Π² этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ доступС ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π½Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… устройствах, Π½ΠΎ Π² Qt ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ тСкст Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния. Π­Ρ‚ΠΎ обСспСчиваСтся рСсурсной систСмой Qt. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π³Π»Π°Π²Π°Ρ… ΠΌΡ‹ использовали Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов для внСдрСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ любой Ρ„Π°ΠΉΠ». Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с использованиСм QFile, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, располоТСнныС Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

РСсурсы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π‘++ рСсурсным компилятором Qt (rcc). ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ qmake, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° для выполнСния rcc, добавляя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку Π² Ρ„Π°ΠΉΠ» .pro:

RESOURCES = myresourcefile.qrc

Π€Π°ΠΉΠ» myresourcefile.qrc β€” это XMLβ€”Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит список Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Ρ… Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Допустим, создаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сохраняСт ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π Π°Π΄ΠΈ удобства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Если Ρ„Π°ΠΉΠ» находится Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ datafiles ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° сборки прилоТСния, Ρ„Π°ΠΉΠ» рСсурсов ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>

<file>datafiles/phone-codes.dat</file>

</qresource>

</RCC>

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ рСсурсы ΠΎΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ ΠΏΠΎ прСфиксу ΠΏΡƒΡ‚ΠΈ :/. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„Π°ΠΉΠ» Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ :/datafiles/phone-codes.dat ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ считан ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ QFile.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ внСдрСния Π΄Π°Π½Π½Ρ‹Ρ… Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… исполняСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (Ссли использовалась статичСская ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°). Двумя нСдостатками ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρ‹ всСго исполняСмого модуля ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° исполняСмого модуля ΠΈΠ·-Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ расхода памяти ΠΏΠΎΠ΄ Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

РСсурсная систСма Qt ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ прСдставлСны Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ псСвдонимов Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ этим возмоТностям ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Π²Π΅Π±-страницС http://doc.trolltech.com/4.1/resources.html

Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами

Класс QProcess позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ внСшниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΎΡ‚ класс Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ асинхронно ΠΈ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. QProcess посылаСт сигналы, ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡŽΡ‰ΠΈΠ΅ нас ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠœΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ нСбольшого прилоТСния, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для внСшнСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСобразования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ нашСм случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ convert ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ImageMagick, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ свободно распространяСтся Π½Π° всСх основных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

Рис. 12.2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Image Converter.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ прилоТСния Image Converter (ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) Π±Ρ‹Π» создан ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Qt Designer. Π€Π°ΠΉΠ» .ui находится Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ основноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ подклассу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся наслСдником сгСнСрированного компилятором uic класса Ui::ConvertDialog, ΠΈ Π½Π°Ρ‡Π½Π΅ΠΌ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

01 #ifndef CONVERTDIALOG_H

02 #define CONVERTDIALOG_H

03 #include <QDialog>

04 #include <QProcess>

05 #include "ui_convertdialog.h"

06 class ConvertDialog : public QDialog,

07 public Ui::ConvertDialog

08 {

09 Q_OBJECT

10 public:

11 ConvertDialog(QWidget *parent = 0);

12 private slots:

13 void on_browseButton_clicked();

14 void on_convertButton_clicked();

15 void updateOutputTextEdit();

16 void processFinished(int exitCode, QProcess::ExitStatus exitStatus);

17 void processError(QProcess::ProcessError error);

18 private:

19 QProcess process;

20 QString targetFile;

21 };

22 #endif

Π­Ρ‚ΠΎΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» создаСтся ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² подклассах Ρ„ΠΎΡ€ΠΌ Qt Designer. Благодаря ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ автоматичСского связывания QtDesigner слоты on_browseButton_clicked() ΠΈ on_convertButton_clicked() автоматичСски ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с сигналом clicked() ΠΊΠ½ΠΎΠΏΠΎΠΊ Browse (ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ) ΠΈ Convert (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ).

01 ConvertDialog::ConvertDialog(QWidget *parent)

02 : QDialog(parent)

03 {

04 setupUi(this);

05 connect(&process, SIGNAL(readyReadStandardError()),

06 this, SLOT(updateOutputTextEdit()));

07 connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)),

08 this, SLOT(processFinished(int, QProcess::ExitStatus)));

09 connect(&process, SIGNAL(error(QProcess::ProcessError)),

10 this, SLOT(processError(QProcess::ProcessError)));

11 }

Π’Ρ‹Π·ΠΎΠ² setupUi() создаСт ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅Ρ‚ всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌ, устанавливаСт соСдинСния сигнал—слот для слотов on_objectName_signalName() ΠΈ связываСт ΠΊΠ½ΠΎΠΏΠΊΡƒ Quit (Π²Ρ‹ΠΉΡ‚ΠΈ) с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ QDialog::accept(). ПослС этого ΠΌΡ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ связываСм Ρ‚Ρ€ΠΈ сигнала ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QProcess с трСмя Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ слотами. Π›ΡŽΠ±Ρ‹Π΅ сообщСния внСшнСго процСсса для ΠΏΠΎΡ‚ΠΎΠΊΠ° cerr ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ updateOutputTextEdit().

01 void ConvertDialog::on_browseButton_clicked()

02 {

03 QString initialName = sourceFileEdit->text();

04 if (initialName.isEmpty())

05 initialName = QDir::homePath();

06 QString fileName = QFileDialog::getOpenFileName(this,

07 tr("Choose File"), initialName);

08 fileName = QDir::convertSeparators(fileName);

09 if (!fileName.isEmpty()) {

10 sourceFileEdit->setText(fileName);

11 convertButton->setEnabled(true);

12 }

13 }

Π‘ΠΈΠ³Π½Π°Π» clicked() ΠΊΠ½ΠΎΠΏΠΊΠΈ Browse (ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ) автоматичСски связываСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setupUi() со слотом on_browseButton_clicked(). Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π» ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„Π°ΠΉΠ», ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ этого Ρ„Π°ΠΉΠ»Π°; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ домашний ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

01 void ConvertDialog::on_convertButton_clicked()

02 {

03 QString sourceFile = sourceFileEdit->text();

04 targetFile = QFileInfo(sourceFile).path()

05 + QDir::separator() + QFileInfo(sourceFile).baseName()

06 + "." + targetFormatComboBox->currentText().toLower();

07 convertButton->setEnabled(false);

08 outputTextEdit->clear();

09 QStringList args;

10 if (enhanceCheckBox->isChecked())

11 args << "-enhance";

12 if (monochromeCheckBox->isChecked())

13 args << "-monochrome";

14 args << sourceFile << targetFile;

15 process.start("convert", args);

16 }

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ Convert (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ), ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ имя исходного Ρ„Π°ΠΉΠ»Π° ΠΈ измСняСм Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π² соотвСтствии с Π½ΠΎΠ²Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π°. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ зависимый ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ('/' ΠΈΠ»ΠΈ '\' возвращаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ QDir::separator()) вмСсто ТСсткого кодирования этих символов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π°.

Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Convert, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠ³ случайно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько процСссов прСобразования, ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ ΠΏΠΎΠ»Π΅ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ для отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии.

Для инициирования внСшнСго процСсса ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ QProcess::start() с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ (convert), ΠΈ всСми Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ„Π»Π°ΠΆΠΊΠΈ -enhance ΠΈ -monochrome, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° исходного ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ΠΈΠΏ выполняСмого прСобразования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° convert опрСдСляСт ΠΏΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ².