QPrinter, QPrintDialog, выдающий ошибки, не встречающиеся в примерах кода - PullRequest
0 голосов
/ 21 июня 2011

В примере средства просмотра изображений объекты QPainter и QPrintDialog определены и используются следующим образом:

#ifndef QT_NO_PRINTER
QPrinter printer;
#endif

и

QPrintDialog dialog(&printer, this);

Объект QPainter затем инициализируется с помощью QPrinter (принтера).

Когда я пытался использовать тот же код в своей функции, он выглядел следующим образом:

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 ]

1 голос
/ 27 октября 2015
QPrinter printer(this); 

Это объявление функции (см. https://en.wikipedia.org/wiki/Most_vexing_parse).

Вам необходимо написать:

QPrinter printer = QPrinter(this);

или

QPrinter printer((this));
1 голос
/ 21 июня 2011

Вы используете #ifdef QT_NO_PRINTER в своем коде, но в примере используется #ifndef QT_NO_PRINTER

Обратите внимание на разницу между , если не определено и , если определено

Если ваш код компилируется, это означает, что в вашем проекте есть QT_NO_PRINTER. Без принтера вы не сможете печатать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...