1

drawBackgroundQGraphicsSceneをオーバーライドするクラスがありますが、drawBackground実装が呼び出されることはありません。

class CtrlCutScene : public QGraphicsScene
{
  Q_OBJECT

public:
  CtrlCutScene(QObject *parent = 0);
  ~CtrlCutScene() {}

protected:
   //added override to make the compiler check that signatures match
   virtual void drawBackground(QPainter *painter, const QRectF &rect) override;
};

私が間違っている可能性があることは何ですか?

4

1 に答える 1

1

質問者は彼らのケースの解決策を見つけましたが、これがこの問題に対する最初の Google ヒットであるため、私の場合の回答のためにここに投稿しています。

私の場合、Web ページから関数シグネチャをコピーして貼り付け、完全に正しく、タイプミスがないことを確認しました。

そして、関数は呼び出されませんでした。

その理由は、関数名の直前に非表示の Unicode 文字 U+FEFF があったためです。また、QtCreator エディターはその文字のゼロ幅を尊重するため、貼り付けた後でも見えませんでした。

​void AnimScene::​drawBackground(QPainter * painter, const QRectF & rect) { // Evil
void AnimScene::drawBackground(QPainter * painter, const QRectF & rect) { // Works

上記は、比較のために、その文字がある場合とない場合の行です。

少なくともプレビューでは、Stackoverflow は貼り付けられた U+FEFF (「ゼロ幅の改行なしスペース」) を U+200B (「ゼロ幅のスペース」) として公開しているように見えます。しかし、同じ視覚効果。

この影響が原因であると思われる問題が発生した場合は、すべてのファイルを閉じてから、[ツール] メニュー -> [オプション...] メニュー項目 -> [テキスト エディター] セクションに移動して確認する方法があります。 -> "Behavior" タブ -> "File Encodings" パネル -> "Default Encoding" ドロップダウンで、US-ASCII のようなものに変更します。[OK] をクリックして、ファイルを再度開きます。

関数シグネチャの新しい文字が「認識されない文字」ボックスとして表示されるかどうかを確認します。上書きしたくないソース内の他の場所で拡張文字を上書きする可能性があるため、保存しないでください。代わりに、ファイルを閉じて、設定を元に戻してください。次に、ファイルを再度開き、ボックスを含むすべての行を書き直します。

于 2015-02-14T03:23:50.303 に答える