2011-06-21 90 views
0

在圖像瀏覽器實例,QPainter的和QPrintDialog中對象定義和使用如下中的代碼示例未遇到錯誤:QPrinter來,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文件,並確保在該示例的其他地方沒有觸及'打印機'和'對話框'。

回答

1

您正在使用您的代碼#ifdef QT_NO_PRINTER但示例使用#ifndef QT_NO_PRINTER

注重之間的區別,如果如果定義

如果你的代碼編譯沒有定義和那麼就意味着你有QT_NO_PRINTER在你的項目中。沒有打印機,您無法打印!

+0

做到左右逢源使用#ifdef來和的#ifndef。在後一種情況下,即控制不進入#的if-else –

+0

QT_NO_PRINTER是一個預處理指令。你需要從你的項目中刪除它。如果你的QT SDK已經與打印機支持一起編譯,你應該沒問題。否則,您將得到「QPrinter的未解析的外部符號」錯誤。如果您想打印,請先從您的項目中刪除此指令! –

+0

刪除指令後,同樣的錯誤仍然存​​在。 –

1
QPrinter printer(this); 

這是聲明函數(請參閱https://en.wikipedia.org/wiki/Most_vexing_parse)。

你需要寫:

QPrinter printer = QPrinter(this); 

或:

QPrinter printer((this)); 
+0

謝謝@Alan Birtles的回答。自從我問這個問題已經四年多了,我不再與Qt合作,或者作爲一個專業程序員。但是謝謝你回答並提醒我這一點。 –