Название: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: n4ela от Февраль 08, 2010, 23:30 Есть html документ, который хотелось перед распечаткой посмотреть QPrintPreviewDialog.
Весь документ хранится в QString, помещаю его в QTextDocument как html. И если его сразу отправить на печать, то печатается отлично( проверял пока что только на печать в pdf ) вот так все работает: Код Но если я хочу посмотреть на документ через предпросмотор то там он отображается не верно, игнорируется выравнивание текста, например если текст выравнен по центру, он все равно сместится к левому краю. Код у меня такой: Код + ко всему если в окне предпросмотра нажать на печать и отпечатать документ в пдф, то pdf файл сохранится, а программа вылетит в сегфолт. Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: Marat(Qt) от Апрель 12, 2010, 19:03 Если еще актуально или хотя бы интересно кому-нибудь: переменная printer во втором коде локальная, она уничтожается после завершения выполнения функции, поэтому после завершения работы диалога данные отправляются уничтоженному объекту - отсюда сегфолт. Вероятно с этим связаны и остальные проблемы.
Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: BRE от Апрель 12, 2010, 19:08 Если еще актуально или хотя бы интересно кому-нибудь: переменная printer во втором коде локальная, она уничтожается после завершения выполнения функции, поэтому после завершения работы диалога данные отправляются уничтоженному объекту - отсюда сегфолт. Вероятно с этим связаны и остальные проблемы. Ты уверен? ;)Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: Marat(Qt) от Апрель 12, 2010, 20:02 Ты уверен? ;) В актуальности нет, в локальности переменной - да ;)Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: BRE от Апрель 12, 2010, 20:06 В актуальности нет, в локальности переменной - да ;) В причине? ;)Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: Marat(Qt) от Апрель 12, 2010, 20:27 В причине? ;) Причина сегфолта, на мой взгляд, очевидна. Мы работаем не с тем сегментом памяти, а это ошибка сегментирования. С вопросом форматирования не все так тривиально, но рассматривать его стоит только после "глобализации" переменной printer или её создания оператором new.Подобные ошибки у меня бывали с моделями для QTableView. Я их создавал локально, прикреплял методом setModel и получал совершенно непредсказуемую программу. Усомниться в причине может любитель питона. В питоне мы создаем объект локально, закрепляем его за родителем (например layout.addWidget(w)) и он спокойно функционирует. Но питон это не C++ Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: BRE от Апрель 12, 2010, 20:30 Причина сегфолта, на мой взгляд, очевидна. Мы работаем не с тем сегментом памяти, а это ошибка сегментирования. С вопросом форматирования не все так тривиально, но рассматривать его стоит только после "глобализации" переменной printer или её создания оператором new. Что бы много не писать, посмотри пример fontsampler из Qt.Подобные ошибки у меня бывали с моделями для QTableView. Я их создавал локально, прикреплял методом setModel и получал совершенно непредсказуемую программу. Усомниться в причине может любитель питона. В питоне мы создаем объект локально, закрепляем его за родителем (например layout.addWidget(w)) и он спокойно функционирует. Но питон это не C++ Там используется примерно такой же кусок кода (с локальным QPrinter) для работы с QPrintPreviewDialog, поэкспериментируй. Обрати внимание как он активируется (exec()), когда будет отсылаться сигнал paintRequested. Название: Re: QPrintPreviewDialog и html документ, теряется выравнивание. Отправлено: BRE от Апрель 12, 2010, 20:38 Причина сегфолта, на мой взгляд, очевидна. Мы работаем не с тем сегментом памяти, а это ошибка сегментирования. С вопросом форматирования не все так тривиально, но рассматривать его стоит только после "глобализации" переменной printer или её создания оператором new. Ты заблуждаешься. ;)Подобные ошибки у меня бывали с моделями для QTableView. Я их создавал локально, прикреплял методом setModel и получал совершенно непредсказуемую программу. Да, такие ошибки допускают, но это не тот случай.Усомниться в причине может любитель питона. В питоне мы создаем объект локально, закрепляем его за родителем (например layout.addWidget(w)) и он спокойно функционирует. Но питон это не C++ Разберись с вопросом. ;) |