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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: No such slot QFrame::printDocument(QPrinter*)  (Прочитано 6430 раз)
negative
Гость
« : Сентябрь 01, 2009, 11:36 »

Хочу вывести превьюшку.

Код:
void mainArea::printPreview()
{
   QPrinter printer;

   QPrintPreviewDialog preview( &printer, this );
   connect( &preview, SIGNAL(paintRequested(QPrinter *) ),
                      this, SLOT(printDocument(QPrinter*)));
   preview.exec();
}


void mainArea::printDocument( QPrinter *printer_ )
{
    QPainter painter;
    painter.begin(printer_);
    this->render( printer_ );
    painter.end();
}

Мне сообщают, что Object::connect: No such slot QFrame::printDocument(QPrinter*), и вылезает пустая превьюшка. В чем тут дело?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентябрь 01, 2009, 11:39 »

void mainArea::printDocument( QPrinter *printer_ ) не слот, вот об этом и говорит. Нужно в хедере сделать
Код
C++ (Qt)
private Q_SLOTS:
void printDocument( QPrinter *printer_ );
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Сентябрь 01, 2009, 11:39 »

А printDocument объявлен как слот? Q_OBJECT есть?

Покажи вобжем *.h файл
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
negative
Гость
« Ответ #3 : Сентябрь 01, 2009, 11:43 »

Код:
#ifndef MAINAREA_H
#define MAINAREA_H

#include <QtGui/QScrollArea>
#include <QMouseEvent>
#include <QCursor>
#include <vector>
#include <QPrintPreviewDialog>
#include <QPainter>
#include <QPrinter>
#include <QColor>
#include <QMessageBox>
#include <QFile>
#include <QFileDialog>
#include <QIODevice>
#include <QByteArray>
#include <QHBoxLayout>

#include "abstractMainArea.h"
#include "area.h"
#include "textarea.h"
#include "imagearea.h"
#include "vector_line.h"

using namespace std;

enum AbsractNextAction {CURSOR = 0, TEXT = 1, IMG = 2};

class mainArea : public abstractMainArea
{
    // all elements stored here
    vector<Area*> element;
    vector<vectorLine*> line;
    void deleteArea(int id);
    bool mouseDown;
    QPoint mouseGotDown, mouseNow;
public:
    void printPreview();
    void deleteSelectedAreas();
    AbsractNextAction nextAction;
    mainArea(QWidget* parent=0);
    void mousePressEvent ( QMouseEvent * e );
    void mouseReleaseEvent ( QMouseEvent * e );
    void mouseMoveEvent ( QMouseEvent * e );
    void paintEvent(QPaintEvent *e);
    void unselectAll(int eid);
    void selectAll();
    char * Store(); // Genetate text info about elements
    void addText(int X=0, int Y=0, const QString & data = "");
    void addImage(int X=0, int Y=0, const QString & data = "");
    void addLine();
private slots:
    void printDocument( QPrinter *printer_ );

};

#endif // MAINAREA_H

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Сентябрь 01, 2009, 11:44 »

Q_OBJECT забыл
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
negative
Гость
« Ответ #5 : Сентябрь 01, 2009, 11:48 »

Код:
#ifndef MAINAREA_H
#define MAINAREA_H

#include <QtGui/QScrollArea>
#include <QMouseEvent>
#include <QCursor>
#include <vector>
#include <QPrintPreviewDialog>
#include <QPainter>
#include <QPrinter>
#include <QColor>
#include <QMessageBox>
#include <QFile>
#include <QFileDialog>
#include <QIODevice>
#include <QByteArray>
#include <QHBoxLayout>

#include "abstractMainArea.h"
#include "area.h"
#include "textarea.h"
#include "imagearea.h"
#include "vector_line.h"

using namespace std;

enum AbsractNextAction {CURSOR = 0, TEXT = 1, IMG = 2};

class mainArea : public abstractMainArea
{
    Q_OBJECT
    // all elements stored here
    vector<Area*> element;
    vector<vectorLine*> line;
    void deleteArea(int id);
    bool mouseDown;
    QPoint mouseGotDown, mouseNow;
public:
    void printPreview();
    void deleteSelectedAreas();
    AbsractNextAction nextAction;
    mainArea(QWidget* parent=0);
    void mousePressEvent ( QMouseEvent * e );
    void mouseReleaseEvent ( QMouseEvent * e );
    void mouseMoveEvent ( QMouseEvent * e );
    void paintEvent(QPaintEvent *e);
    void unselectAll(int eid);
    void selectAll();
    char * Store(); // Genetate text info about elements
    void addText(int X=0, int Y=0, const QString & data = "");
    void addImage(int X=0, int Y=0, const QString & data = "");
    void addLine();
private slots:
    void printDocument( QPrinter *printer_ );

};

#endif // MAINAREA_H

При добавлении Q_OBJECT появилось :-1: error: collect2: ld returned 1 exit status
Что с этим делать?)
« Последнее редактирование: Сентябрь 01, 2009, 11:51 от negative » Записан
BRE
Гость
« Ответ #6 : Сентябрь 01, 2009, 11:58 »

При добавлении Q_OBJECT появилось :-1: error: collect2: ld returned 1 exit status
Что с этим делать?)
make distclean && qmake && make
Записан
negative
Гость
« Ответ #7 : Сентябрь 01, 2009, 12:04 »

Огромное спасибо) Все заработало)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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