QPrinter,QPrintDialog给出了代码示例中没有遇到的错误

时间:2011-06-21 08:18:12

标签: qt

在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文件,并确保示例中的其他任何位置都没有触及“打印机”和“对话框”。

2 个答案:

答案 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));