Russian Qt Forum
Ноябрь 22, 2024, 01:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPrinter печатает все листы. Выбор не работает. (решено)  (Прочитано 12424 раз)
sergey2212
Гость
« : Февраль 24, 2015, 09:56 »

Товарищи пожалуйста помогите голову сломал как сделать так что бы если пользователь выбрал  страницы которые надо печатать, чтоб именно они и печатались.
Понимаю что надо копать в сторону printer.fromPage() и printer.toPage(). и сигнала PaintRequested(). но все методы тыка перепробывал ничего не получается. Заранее благодарен
« Последнее редактирование: Февраль 25, 2015, 11:05 от sergey2212 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Февраль 24, 2015, 10:18 »

Это http://qt-project.org/doc/qt-4.8/qprinter.html#setFromTo ?
« Последнее редактирование: Февраль 24, 2015, 12:02 от gil9red » Записан

sergey2212
Гость
« Ответ #2 : Февраль 24, 2015, 10:32 »

Спасибо за неравнодушных людей на этом форуме. Но gil9red то куда вы меня отправили там я уже был. Все это называется знания, но я к сожалению не пойму как их применить. Вот написал я  printer.setFromTo(2,2); но он все равно печатает все страницы.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Февраль 24, 2015, 12:06 »

Сделал небольшой тестовый проект проверил печать -- работает (Qt 4.8.6)

Код
C++ (Qt)
#include <QApplication>
#include <QPrinter>
#include <QTextEdit>
#include <QFile>
#include <QTextCodec>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
 
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
 
   QTextEdit te;
 
   QFile file("C:\\bash.txt");
   if (file.open(QFile::ReadOnly))
       te.setText(QString(file.readAll()));
 
   QPrinter printer;
   printer.setOutputFileName( "C:\\bash.pdf" );
   printer.setFromTo(2, 2);
   te.print( &printer );
 
   return 0;
   //return a.exec();
}
 

bash.txt приложил к этому сообщению.
« Последнее редактирование: Февраль 24, 2015, 12:21 от gil9red » Записан

sergey2212
Гость
« Ответ #4 : Февраль 24, 2015, 12:33 »

Спасибо за пример. Но видимо этот пример работает с файлом. Хочу показать как у меня работает вывод на печать
в .h
Код:
public slots:
    void print();

private slots:
    void preview(QPrinter *printer);

в .cpp

Код:
void zakaz::print()                                //печать
{

    ////---печать---////


    QPrinter printer;
    
    printer.setOrientation(QPrinter::Portrait);
    printer.setPageSize(QPrinter::A4);

    printer.setPaperSize(QSize(210,297),QPrinter::Millimeter);
    printer.setPageMargins(20,10,0,0,QPrinter::Millimeter);

    printer.setFromTo(1,1);

       QPrintPreviewDialog previewD( &printer, this );

       connect( &previewD, SIGNAL(paintRequested(QPrinter *) ), this, SLOT(preview(QPrinter *)));
       previewD.showMaximized();
       previewD.setWindowTitle("Предпросмотр");

       previewD.exec();

а это там где рисую текст

Код:
void zakaz::preview(QPrinter *printer)
{
QPainter painter;
    painter.begin(printer);
    painter.setRenderHint(QPainter::Antialiasing, true);

//здесь рисую текст

    painter.end();



проверьте может у вас пойдет
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Февраль 24, 2015, 12:53 »

Если проверять ваш код, тогда не его куски выкладывайте, а компилябельный минимальный проектом с вашей проблемой Подмигивающий
Записан

__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Февраль 24, 2015, 12:56 »

что выдает int QPrinter::​toPage() ?
если вставить перед printer.setFromTo(1,1);
Записан
sergey2212
Гость
« Ответ #7 : Февраль 24, 2015, 13:16 »

Heaven Выдает ноль
Записан
sergey2212
Гость
« Ответ #8 : Февраль 25, 2015, 11:25 »

Вопрос решил костылем. Уверен что есть еще проще решение.
натолкнул на мысль Heaven

перед painter.begin узнал переменную toPage и так как у меня всего две страницы то через условие if () стал рисовать страницы исходя из выбора страницы принтера. Всем спасибо за помощь. heaven если хочешь можешь оставить номер кину 50 р
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Февраль 25, 2015, 12:10 »

Не, спасибо Улыбающийся
Записан
dmr
Гость
« Ответ #10 : Июнь 22, 2015, 15:37 »

Аналогичный геммор был и у меня.
http://www.prog.org.ru/topic_26852_0.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 22.