Russian Qt Forum

Qt => Печать => Тема начата: negative от Сентябрь 01, 2009, 11:36



Название: No such slot QFrame::printDocument(QPrinter*)
Отправлено: 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*), и вылезает пустая превьюшка. В чем тут дело?


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: Пантер от Сентябрь 01, 2009, 11:39
void mainArea::printDocument( QPrinter *printer_ ) не слот, вот об этом и говорит. Нужно в хедере сделать
Код
C++ (Qt)
private Q_SLOTS:
void printDocument( QPrinter *printer_ );


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: pastor от Сентябрь 01, 2009, 11:39
А printDocument объявлен как слот? Q_OBJECT есть?

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


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: negative от Сентябрь 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

Случайно удалил вместо редактирования пост...вот восстановил


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: pastor от Сентябрь 01, 2009, 11:44
Q_OBJECT забыл


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: negative от Сентябрь 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
Что с этим делать?)


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: BRE от Сентябрь 01, 2009, 11:58
При добавлении Q_OBJECT появилось :-1: error: collect2: ld returned 1 exit status
Что с этим делать?)
make distclean && qmake && make


Название: Re: No such slot QFrame::printDocument(QPrinter*)
Отправлено: negative от Сентябрь 01, 2009, 12:04
Огромное спасибо) Все заработало)