0
我正在构建一个使用Qt Quick Controls的应用程序,并且我还需要一些C++(用于打印和读取文件)。我挖了this,所以我已经将它修改为我的需求:C++和qml之间的问题
bonuri.h
#ifndef BONURI_H
#define BONURI_H
#include <QObject>
#include <QTemporaryFile>
#include <QIODevice>
#include <QPainter>
#include <QtSvg/QSvgRenderer>
#include <QFile>
#include <QTextStream>
#include <QtPrintSupport/QPrintPreviewDialog>
#include <QtPrintSupport/QPrinter>
class Bonuri : public QObject {
Q_OBJECT
public:
explicit Bonuri(QObject *parent = 0);
public slots:
void printSVG(const QString& in);
QString list();
void actualPrint(QPrinter* p, const QString& in);
};
#endif // BONURI_H
bonuri.cpp
#include "bonuri.h"
Bonuri::Bonuri(QObject *parent) :
QObject(parent)
{
}
void Bonuri::printSVG(const QString& in){
QPrinter printer(QPrinter::HighResolution);
printer.setPaperSize(QPrinter::A5);
QPrintPreviewDialog printDialog(&printer);
connect(&printDialog, SIGNAL(paintRequested(QPrinter*)), SLOT(actualPrint(QPrinter*, in)));
printDialog.exec();
}
void actualPrint(QPrinter* p, const QString& in){
QTemporaryFile file;
if (file.open()){
QTextStream out(&file);
out << in;
QSvgRenderer renderer(file.fileName());
QPainter myPainter(p);
myPainter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
renderer.render(&myPainter);
}
}
QString list(){
QFile file("Bonuri.json");
QString totalLine;
if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
QTextStream in(&file);
while (!in.atEnd()){
QString line = in.readLine();
totalLine += line;
}
}
return totalLine;
}
的问题是,我没有那么大的C++专家,并且无法进行调试。
问题: moc_bonuri.cpp
未定义参照 'Bonuri ::列表()';未定义引用'Bonuri :: actualPrint(QPrinter *,QString const &)'
还有一件事:你能帮我优化代码吗(我是C++的新手,真的不知道为什么它是这样的是,我只是用例子)。
问题是,QTemporaryFile被删除时,它超出了范围,所以我能做什么? – user2563892 2014-11-04 17:41:13
@ user2563892创建QTemporaryFile作为类成员。 – Chernobyl 2014-11-04 17:42:30
我该怎么做? – user2563892 2014-11-04 17:42:53