ウィンドウのサイズを変更しながらアスペクト比をロックするにはどうすればよいですか?

ピート

画像を表示するウィンドウを開くqtアプリケーションがあります。ウィンドウのサイズを変更して、ウィンドウのアスペクト比を維持できるようにしたい。ウィンドウの元のサイズは480x640(幅x高さ)です。幅を変えると高さも一緒に変え、高さを変えると幅も変えるという効果が欲しいです。ウィンドウの幅または高さを変更しているかどうかをどのように検出できますか。

以下のコードを実装しました。幅を変更してもアスペクト比は維持されますが、ウィンドウの高さを変更することはできません。高さを小さくしたり大きくしたりすることはできません。

以下のコードはウィンドウを作成します。

#ifndef VideoWidget_h
#define VideoWidget_h

#include <iostream>

// Qt libraries
#include <QApplication>
#include <QtCore>
#include <QWidget>
#include <QGLWidget>

using namespace cv;
using namespace std;

class VideoWidget : public QGLWidget
{
    Q_OBJECT

public:
    VideoWidget()
    {

    }

protected:

    void resizeGL(int width, int height)
    {
        const float ASPECT_RATIO = (float) WIDTH / (float) HEIGHT;
        const float aspect_ratio = (float) width / (float) height;

        if (aspect_ratio > ASPECT_RATIO) {
            height = (1.f / ASPECT_RATIO) * width;
            resize(width, height);
        } else if (aspect_ratio < ASPECT_RATIO) {
            height = ASPECT_RATIO * height;
            resize(width, height);
        }
    }

private:
    int WIDTH = 480;
    int HEIGHT = 640;

};


#endif /* VideoWidget_h */

以下のコードが主な機能です。

#include <iostream>

// Qt libraries
#include <QApplication>
#include <QtCore>
#include <QWidget>
#include <QGLWidget>

#include "VideoWidget.h"

using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
    QApplication app (argc, argv);

    VideoWidget v;
    v.resize(480, 640);
    v.show();

    return app.exec();
}
アレクサンダーV

ウィンドウのサイズを変更しながらアスペクト比をロックするにはどうすればよいですか?

この場合、QWidget :: resizeEvent:のオーバーロードを利用できます

void MyWidget::resizeEvent(QResizeEvent *event)
{
   static const float ratioY2X = (float) HEIGHT / (float) WIDTH;

   // QResizeEvent type has oldSize() and size()
   // and size() has an actual new size for the widget
   // so we can just take it and apply the ratio.

   // first try to detect the direction of the widget resize
   if (event->oldSize().width() != event->size().width())
      this->resize(event->size().width(),             // apply the correct ratio
                   event->size().width() * ratioY2X); // to either of width/height
   else
      this->resize(event->size().height() / ratioY2X, // apply the correct ratio
                   event->size().height());           // to either of width/height
   event->accept(); // we've finished processing resize event here
}

このソリューションにはサイジングのヒントが適用されていないことに注意してください(デフォルト)。

PSif実際にデバッグを試みた後オペレーターでこのソリューションを修正しました。ウィジェットの隅をドラッグしてウィジェットのサイズを変更する必要がある場合は、幅が優先されます(ウィジェットを選択する必要がありますが、他にどのように機能しますか?)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスのスロットからメインウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

ウィジェットを非表示にした後、ウィンドウのサイズを変更できるようにしながら、ウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

ウィンドウのサイズを変更するときに、すべてのフレックスアイテムのサイズが変更されないようにするにはどうすればよいですか?

分類Dev

LibGDXウィンドウのサイズを変更した後にアクターの位置を更新するにはどうすればよいですか?

分類Dev

アスペクト比を維持しながら、Flexでテーブルのサイズを変更するにはどうすればよいですか?

分類Dev

Reactフック `useWindowSize`を使用してMobXストア内のウィンドウサイズを初期化するにはどうすればよいですか?

分類Dev

エッジがオーバーレイスクロールバーで非表示になっている場合、ウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

JavaScriptでウィンドウサイズ変更イベントリスナーをアタッチするにはどうすればよいですか?

分類Dev

Chromeアプリウィンドウでテキストエリアのサイズを動的に変更するにはどうすればよいですか?

分類Dev

アスペクト比を維持しながらdiv要素を自動サイズ変更するにはどうすればよいですか?

分類Dev

Rでプロットウィンドウのサイズを永続的に変更するにはどうすればよいですか?

分類Dev

アクティビティがフルスクリーンモードになったときにレイアウトのサイズが変更されないようにするにはどうすればよいですか?

分類Dev

オブジェクト指向プログラミングを使用せずに、tkinterでキャンバスオブジェクトのサイズをウィンドウサイズに変更するにはどうすればよいですか?

分類Dev

UI スレッドがウィンドウをブロックします。それを変更するにはどうすればよいですか?

分類Dev

コントローラーからサイズ変更時にangularJSでウィンドウ幅を取得するにはどうすればよいですか?

分類Dev

ウィンドウサイズを変更した場合でも、divをページの中央に配置するにはどうすればよいですか?

分類Dev

ターゲットサイズを指定して、アスペクト比を維持しながら、Pythonで画像のサイズを変更するにはどうすればよいですか?

分類Dev

LWJGLウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

GLUTウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

Aquamacsウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

VLCウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

Pygame。サーフェスのサイズを変更し、すべてのオブジェクトを新しいウィンドウサイズに比例させるにはどうすればよいですか?

分類Dev

Pygame。サーフェスのサイズを変更し、すべてのオブジェクトを新しいウィンドウサイズに比例させるにはどうすればよいですか?

分類Dev

ウィンドウのサイズを変更するときにマウスクリックを使用して画像の座標を取得するにはどうすればよいですか?

分類Dev

iframeやその他のスクリプトがトップウィンドウのドキュメントのタイトルを変更しないようにするにはどうすればよいですか?

分類Dev

右下が表示されていないときにウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

アクティビティレイアウトの属性を異なるクラスから変更するにはどうすればよいですか?

分類Dev

ブラウザのウィンドウサイズに関連してdivのサイズを変更するにはどうすればよいですか?

分類Dev

GNOMEでアクティブなウィンドウのタイトルバーの色を変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    クラスのスロットからメインウィンドウのサイズを変更するにはどうすればよいですか?

  2. 2

    ウィジェットを非表示にした後、ウィンドウのサイズを変更できるようにしながら、ウィンドウのサイズを変更するにはどうすればよいですか?

  3. 3

    ウィンドウのサイズを変更するときに、すべてのフレックスアイテムのサイズが変更されないようにするにはどうすればよいですか?

  4. 4

    LibGDXウィンドウのサイズを変更した後にアクターの位置を更新するにはどうすればよいですか?

  5. 5

    アスペクト比を維持しながら、Flexでテーブルのサイズを変更するにはどうすればよいですか?

  6. 6

    Reactフック `useWindowSize`を使用してMobXストア内のウィンドウサイズを初期化するにはどうすればよいですか?

  7. 7

    エッジがオーバーレイスクロールバーで非表示になっている場合、ウィンドウのサイズを変更するにはどうすればよいですか?

  8. 8

    JavaScriptでウィンドウサイズ変更イベントリスナーをアタッチするにはどうすればよいですか?

  9. 9

    Chromeアプリウィンドウでテキストエリアのサイズを動的に変更するにはどうすればよいですか?

  10. 10

    アスペクト比を維持しながらdiv要素を自動サイズ変更するにはどうすればよいですか?

  11. 11

    Rでプロットウィンドウのサイズを永続的に変更するにはどうすればよいですか?

  12. 12

    アクティビティがフルスクリーンモードになったときにレイアウトのサイズが変更されないようにするにはどうすればよいですか?

  13. 13

    オブジェクト指向プログラミングを使用せずに、tkinterでキャンバスオブジェクトのサイズをウィンドウサイズに変更するにはどうすればよいですか?

  14. 14

    UI スレッドがウィンドウをブロックします。それを変更するにはどうすればよいですか?

  15. 15

    コントローラーからサイズ変更時にangularJSでウィンドウ幅を取得するにはどうすればよいですか?

  16. 16

    ウィンドウサイズを変更した場合でも、divをページの中央に配置するにはどうすればよいですか?

  17. 17

    ターゲットサイズを指定して、アスペクト比を維持しながら、Pythonで画像のサイズを変更するにはどうすればよいですか?

  18. 18

    LWJGLウィンドウのサイズを変更するにはどうすればよいですか?

  19. 19

    GLUTウィンドウのサイズを変更するにはどうすればよいですか?

  20. 20

    Aquamacsウィンドウのサイズを変更するにはどうすればよいですか?

  21. 21

    VLCウィンドウのサイズを変更するにはどうすればよいですか?

  22. 22

    Pygame。サーフェスのサイズを変更し、すべてのオブジェクトを新しいウィンドウサイズに比例させるにはどうすればよいですか?

  23. 23

    Pygame。サーフェスのサイズを変更し、すべてのオブジェクトを新しいウィンドウサイズに比例させるにはどうすればよいですか?

  24. 24

    ウィンドウのサイズを変更するときにマウスクリックを使用して画像の座標を取得するにはどうすればよいですか?

  25. 25

    iframeやその他のスクリプトがトップウィンドウのドキュメントのタイトルを変更しないようにするにはどうすればよいですか?

  26. 26

    右下が表示されていないときにウィンドウのサイズを変更するにはどうすればよいですか?

  27. 27

    アクティビティレイアウトの属性を異なるクラスから変更するにはどうすればよいですか?

  28. 28

    ブラウザのウィンドウサイズに関連してdivのサイズを変更するにはどうすればよいですか?

  29. 29

    GNOMEでアクティブなウィンドウのタイトルバーの色を変更するにはどうすればよいですか?

ホットタグ

アーカイブ