2017-01-19 14 views
1

QGraphicsViewから継承した自分のウィジェットを挿入するQMainWindowを持つアプリケーションがあります。私はビューポートとしてQGLWidgetを使用します。すべて正常に動作しますが、Hidh DPIでは問題があります。私のウィジェット(QGraphicsViewから継承)は非常に小さいです。QGraphicsView高DPIによるスケーリング

やった
void MyWidget::onNeedResize(QRect newGeom) 
{ 
     // some logic, that not interact with GUI stuff 
     setGeometry(newGeom); 
     setSceneRect(QRect(QPoint(0, 0), newGeom.size())); 
     // more logic, that not interact with GUI stuff 
} 

:私は

QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 

により、高DPIのサポートを有効にして、私のウィジェットで、私は(コード内の深いQMainWindowから来る信号から)以下かはQApplicationの作成前に

私は逃した?問題はどこですか?

UPD1:私ははQOpenGLWidgetでQGLWidgetを置き換え、すべてが期待と同じように仕事を始めました!修正/計算/追加のものなし。フラグの設定で十分です。しかし、問題はQGLWidgetの代わりにQOpenGLWidgetを使うことができないことです。

答えて

1

OpenGLウィジェットをビューポートとして使用しているため、dpiスケーリングが機能しない理由について私が前提にしています。 〜からQt docs

アプリケーションは、デバイスに依存しないピクセルで動作します。注目すべき例外は、OpenGLとラスターグラフィックスで動作するコードです。

これは、Qt::AA_EnableHighDpiScalingを使用しても、OpenGLコンテンツウィジェットのスケーリングが行われないことを示しています。

devicePixelRatio()をサイズ変更コードで直接使用してください。それはあなたのコード内で使用することができる方法の例:

void MyWidget::onNeedResize(QRect newGeom) 
{ 
     // some logic, that not interact with GUI stuff 
     setGeometry(QRect(newGeom.x() * Application::desktop()->devicePixelRatio(), 
         newGeom.y() * Application::desktop()->devicePixelRatio(), 
         newGeom.width() * Application::desktop()->devicePixelRatio(), 
         newGeom.height() * Application::desktop()->devicePixelRatio())); 
     setSceneRect(QRect(QPoint(0, 0), QSize(
             newGeom.width() * Application::desktop()->devicePixelRatio(), 
             newGeom.height() * Application::desktop()->devicePixelRatio()))); 
     // more logic, that not interact with GUI stuff 
} 

Application::desktop()->devicePixelRatio()倍率を使用し、あなたのウィジェット内で使用すべてのサイズ/位置のために、です。それはあなたの問題を解決するはずです。

+0

ありがとうございました。私は上記のコードを使用して、私のウィンドウの領域はちょうど黒です。しかし、面白いのは、サイズを大きくしてウィンドウのサイズを変更すると、QGraphicsViewの底なしがわかります。 QGraphicsViewのy-coord == MainWindowのボトムコード – user2123079

+0

ジオメトリを設定するときに、x座標とy座標を '(0,0)'に設定してみましょう。 – vicrucann

+0

つまり、 'setGeometry(QRect(0,0、...))' – vicrucann

関連する問題