заголовочный файл создается по тому знакомому образцу, который используется в подклассах форм Qt Designer. Благодаря механизму автоматического связывания QtDesigner слоты on_browseButton_clicked и on_convertButton_clicked автоматически связываются с сигналом clicked кнопок Browse (просмотреть) и Convert (преобразовать).
Вызов setupUi создает и компонует все виджеты форм, устанавливает соединения сигнал—слот для слотов on_objectName_signalName и связывает кнопку Quit (выйти) с функцией QDialog::accept. После этого мы вручную связываем три сигнала объекта QProcess с тремя закрытыми слотами. Любые сообщения внешнего процесса для потока cerr мы будем обрабатывать в функции updateOutputTextEdit.
Сигнал clicked кнопки Browse (просмотреть) автоматически связывается в функции setupUi со слотом on_browseButton_clicked. Если пользователь ранее выбирал какой-нибудь файл, мы инициализируем диалоговое окно выбора файла именем этого файла; в противном случае мы используем домашний каталог пользователя.
пользователь нажимает кнопку Convert (преобразовать), мы копируем имя исходного файла и изменяем его расширение в соответствии с новым форматом файла. Мы используем зависимый от платформы разделитель каталогов ('/' или '\' возвращается функцией QDir::separator) вместо жесткого кодирования этих символов, поскольку пользователь будет видеть имя файла.
Затем отключаем кнопку Convert, чтобы пользователь не мог случайно запустить одновременно несколько процессов преобразования, и очищаем поле текстового редактора, используемое нами для отображения информации о состоянии.
Для инициирования внешнего процесса мы вызываем функцию QProcess::start с именем программы, которая должна выполняться (convert), и всеми ее аргументами. В данном случае мы передаем флажки – enhance и – monochrome, если пользователь выбрал соответствующие опции, и затем имена исходного и целевого файлов. Тип выполняемого преобразования программа convert определяет по расширениям файлов.
При всякой записи внешним процессом в поток cerr вызывается слот updateOutputTextEdit. Мы считываем текст сообщения об ошибке и добавляем его в существующий текст QTextEdit.