1

QGraphicsScene に QGraphicsPixmapItem があり、QGraphicsView でズームインして回転します。回転がない場合、またはズームインしすぎていない場合はすべてうまく機能しますが、ズームインすると (ピクセルが非常に目立ちます)、回転すると奇妙なことが起こります。画像が期待どおりに見える場合もあれば、ピックスマップが (部分的または完全に) 消えたり、画像に水平方向のグラデーションが表示される場合もあります (画像が回転しても水平のままです)。

グラデーションのある画像ここに画像の説明を入力

最初の画像は、別のグリッド (線の集まり) が上に配置されたチャート (色のグラデーションがあってはなりません) です。2 番目の画像は、私の最小限の例 (以下) からのもので、ピックスマップが部分的に欠落していることを示しています (ショットはピックスマップの端から遠く離れています)。

以下は、私が見ているもののほとんどを示す簡単な例です。

#ifndef VIEW_H
#define VIEW_H

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QWheelEvent>
#include <QKeyEvent>

class View : public QGraphicsView
{
  Q_OBJECT
public:
  explicit View(QWidget *parent = 0) :
    QGraphicsView(parent)
  {
    setDragMode(QGraphicsView::ScrollHandDrag);

    QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(QPixmap(":/images/chart.png"));
    pixmapItem->setTransformationMode(Qt::SmoothTransformation);

    QGraphicsScene *scene = new QGraphicsScene();
    scene->addItem(pixmapItem);
    setScene(scene);
  }

protected Q_SLOTS:
  void wheelEvent(QWheelEvent *event)
  {
    if(event->delta() > 0)
      scale(1.25, 1.25);
    else
      scale(0.8, 0.8);
  }

  void keyPressEvent(QKeyEvent *event)
  {
    if(event->key() == Qt::Key_Left)
      rotate(1);
    else if(event->key() == Qt::Key_Right)
      rotate(-1);
  }
};

#endif // VIEW_H

これを囲む他のファイルは、画像を含むリソース ファイル、UI に View を保持する QMainWindow クラス、およびメイン ウィンドウ クラスを実行する main です。これらはすべてGithub プロジェクトで利用できます。

マウスのスクロールホイールでズームイン、矢印キーで回転を再現(マウスでパンも可能)。十分にズームインして回転すると、ピックスマップは一部の角度で (部分的または完全に) 消えます。この例の勾配を再現することはまだできていませんが、これらは同じ問題の別の兆候にすぎないのではないかと考えています。

変換を SmoothTransformation に設定し、renderHint を Antialiasing と HighQualityAntialiasing の両方に設定しようとしましたが、どちらも大きな効果はありませんでした (アンチエイリアシングは高ズームでジャギーを滑らかにします)。さらに、QGraphicView、QGraphicsScene 関連の描画で多くのフラグを切り替えようとしました。これがなぜ起こっているのか、または私がそれに対処しようとすることができる理由を誰かが知っていますか?

Qt 4.8.2 と 10/18/16 に Qt の現在の安定版としてダウンロードした Qt 5.5.1 の両方でこの問題を確認しました。

4

1 に答える 1

0

これは x11 の制限と関係があるようです。基本的に、十分な大きさのズームに達すると、最大サイズの値に達します。

回転が物事に影響を与えるように見える理由はまだ完全にはわかりませんが、推測として、さまざまな角度で変化する画像の境界四角形のサイズに関連している可能性があります。私が見たグラデーションも奇妙で、画像が部分的にしか消えていませんが、それらはすべて関連しているようで、これは別の症状です.

于 2016-10-26T16:22:50.063 に答える