Тему немного переименовално попробовать стоит сначала все же классы Qt: Печать с Qt
Спасибо большое! Получился следующий тестовый код:
//инициализируем класс QPrinter, который будет выводить данные на печать
QPrinter printer(QPrinter::HighResolution);
//устанавливаем отступы и единицы измерения
printer.setPageMargins(10,10,10,10, QPrinter::Millimeter);
//printer.setPaperSize(printer.B9);
//инициализируем QPrintDialog
QPrintDialog *dlg = new QPrintDialog(&printer, this);
//если в textEdit что-то выделено
if (ui->textEdit->textCursor().hasSelection())
{
//устанавливаем печать выделения
dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
}
//устанавливаем заголовок dlg
dlg->setWindowTitle(tr("Print Document"));
//если пользователь подтвердил желание печати
if (dlg->exec() == QDialog::Accepted)
{
//печатаем текст с помощью созданного ранее объекта printer
ui->textEdit->print(&printer);
}
//удаляем dlg
delete dlg;
Он отлично работает, но сами понимаете, что в моем случае выводить клиенту диалоговое окно с предложением выбрать принтер, формат бумаги и т.д. - это по меньшей мере странно(терминал), поэтому необходимо сделать что-то в этом роде, но без использования QPrintDialog. Например, необходимо распечатать чек - программа обращается к ОС, опрашивает устройства ввода-вывода и находит принтер=>данные уходят на этот самый принтер(не самый хороший вариант, т.к. ситуации бывают разные и помимо физического принтера, может быть установлен виртуальный - клиент чека не получит) или еще вариант: администратор терминала устанавливает в ручную устройство, которое будет печатать данные(каким образом можно получить имена доступных принтеров), а программа задействует выбранное устройство.
Как такое можно сделать?Немного подумав над указанными методиками вывода текста без отображения QPrintDialog и посмотрев методы, доступные в классе QPrinter, пишу следующий код:
QPrinter printer(QPrinter::HighResolution);
printer.setPageMargins(10,10,10,10, QPrinter::Millimeter);
printer.setPaperSize(printer.B9);
//смотрю имя принтера, которое было получено при инициализации переменной printer
ui->textEdit->append(printer.printerName()+"\n");
В textEdit получаю: "XEROX_Phaser_3100MFP", т.е. стандартный принтер(точнее МФУ), подключенный к моей машине - хорошо, может быть получится просто отправить данные на указанное МФУ без QPrintDialog, дополняю указанный код:
QPrinter printer(QPrinter::HighResolution);
printer.setPageMargins(10,10,10,10, QPrinter::Millimeter);
printer.setPaperSize(printer.B9);
//смотрю имя принтера, которое было получено при инициализации переменной printer
ui->textEdit->append(printer.printerName()+"\n");
ui->textEdit->print(&printer)
Задание на печать появляется, но оно имеет состояние "Запланировано" - ничего не выводится. Подскажите пожалуйста, что делаю не так, а также каким образом можно получить имена всех имеющихся в системе принтеров?
Пользователь решил продолжить мысль 02 Августа 2012, 06:08:43:
Почитал немного
ЗДЕСЬ и получил следующие строчки, которые возвращают все доступные принтера в системе,
но понять почему задание на печать добавляется сос статусом "Запланировано" так и не смог://получить доступные принтера(в список)
QList<QPrinterInfo> printerInfo= QPrinterInfo::availablePrinters ();
//эти две строки писал для проверки, каждая из них вывела мой указанный ранее принтер(МФУ) Xerox Phaser
ui->textEdit->setText( printerInfo.first().printerName());
ui->textEdit->append( printerInfo.last().printerName());
Пошел дальше копаться и разбираться