在imageviewer示例中,QPainter和QPrintDialog对象的定义和使用如下:
#ifndef QT_NO_PRINTER
QPrinter printer;
#endif
和
QPrintDialog dialog(&printer, this);
然后使用QPrinter(打印机)初始化QPainter对象。
当我尝试在我的函数中使用相同的代码时,它看起来像:
void imageviewer::print()
{
...
#ifdef QT_NO_PRINTER
QPrinter printer(this); //ERROR 1
QPrintDialog dialog(&printer, this);//ERROR 2 and 3
if (dialog.exec()) //ERROR 4
{
//do the painting
}
#endif
}
错误是:
1. variable 'QPrinter printer' has initializer but incomplete type
2. 'QPrintDialog' was not declared in this scope
3. Expected ';' before 'dialog'
4. 'dialog' was not declared in this scope
我无法理解的是,为什么在我的代码中使用它们时会出现这些错误,而不是在示例中。
正如朋友指出的那样,我确保使用了正确的#include文件,并确保示例中的其他任何位置都没有触及“打印机”和“对话框”。
答案 0 :(得分:1)
您在代码中使用#ifdef QT_NO_PRINTER
,但示例使用#ifndef QT_NO_PRINTER
注意如果未定义与如果已定义
之间的差异如果您的代码编译,则表示您的项目中有QT_NO_PRINTER。没有打印机就无法打印!
答案 1 :(得分:1)
QPrinter printer(this);
这是声明一个功能(见https://en.wikipedia.org/wiki/Most_vexing_parse)。
你需要写:
QPrinter printer = QPrinter(this);
或:
QPrinter printer((this));