【发布时间】:2018-06-11 03:01:40
【问题描述】:
我有一个 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 */
下面的代码是main函数。
#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();
}
【问题讨论】:
-
如果你想检测你是在改变宽度还是高度,这很容易。当您更改宽度时,之前的高度保持不变,反之亦然。因此,请检查新高度是否与您要更改宽度的原始高度相同。
-
我这个老 Q 下的一些东西可能会感兴趣:stackoverflow.com/questions/40419768/…
标签: c++ qt opengl aspect-ratio