2011-06-21 10 views
0

で遭遇しないエラーを与えるQPrinter、QPrintDialogは、QPainterのとQPrintDialogオブジェクトは以下のように定義されて使用される:ImageViewerの例ではコード例

#ifndef QT_NO_PRINTER 
QPrinter printer; 
#endif 

QPrintDialog dialog(&printer, this); 

A 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ファイルを使用し、 'printer'と 'dialog'がその例のどこにも触れていないことを確認しました。

答えて

1

あなたはあなたのコード内で#ifdef QT_NO_PRINTERを使用しているが、あなたのコードがコンパイルされた場合

を定義した場合とを定義されていない場合の例では、の差に#ifndef QT_NO_PRINTER

ご注意を使用して、それはあなたがQT_NO_PRINTERを有することを意味しますあなたのプロジェクトで。プリンタがなければ、印刷できません!

+0

は、両方の方法は、#のif-elseを入力していない後者の場合コントロールでの#ifdefと#ifndefの..で、つまりそれをやりました –

+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

あなたの答えは@アラン・バートルズありがとうございます。私はこの質問をしてから4年以上経ちました。私はもはやQtやプログラマーとして働いていません。しかし、私にこれに答えて思い出させてくれてありがとう。 –

関連する問題