Qt窗口调整宽高比1:1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt窗口调整宽高比1:1相关的知识,希望对你有一定的参考价值。

我想按比例1:1按比例调整应用窗口大小。我试图在ResizeEvent中更改它,但后来我让窗口闪烁。现在我的代码看起来像这样,但它不起作用。

filterobject.h:

class FilterObject:public QObject{
public:
    QWidget *target = nullptr;//it holds a pointer to target object
    int goalHeight=0;
    FilterObject(QObject *parent=nullptr):QObject(parent){}//uses QObject constructor
    bool eventFilter(QObject *watched, QEvent *event) override;//and overrides eventFilter function
};

widget.h:

namespace Ui {
class Widget;

}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    virtual int heightForWidth ( int w ) const { return w*9/16;}
    //virtual void resizeEvent(QResizeEvent *event) override;
    ~Widget();

private:
    Ui::Widget *ui;
};

widget.cpp:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void QWidget::resizeEvent(QResizeEvent *event){
   FilterObject *filter = new FilterObject();
   QWidget *targetWidget = new QWidget();
   filter->target=targetWidget;
   targetWidget->installEventFilter(filter);
}

bool FilterObject::eventFilter(QObject *watched, QEvent *event) {
    if(watched != target){//checks for correct target object.
        return false;
    }

    if(event->type() != QEvent::Resize){//and correct event
       return false;
    }

    QResizeEvent *resEvent = static_cast<QResizeEvent*>(event);

    goalHeight = 9*resEvent->size().width()/16;
    if(target->height()!=goalHeight){
        target->setFixedHeight(goalHeight);
    }

    return true;
};

也许这段代码可以工作,但我的条件if(event-> type()!= QEvent :: Resize)不起作用..有什么想法吗?

答案

您的代码中存在一些问题。首先,您应该在构造函数中安装一次事件过滤器。您创建一个事件过滤器的对象,并在每次触发resizeEvent时安装它,这是错误的。你也在错误的对象上安装事件过滤器(一个新的QWidget)。所以删除resizeEvent函数并在Widget的构造函数中插入:

FilterObject *filter = new FilterObject();
filter->target=this;
installEventFilter(filter);

以上是关于Qt窗口调整宽高比1:1的主要内容,如果未能解决你的问题,请参考以下文章

图片按宽高比1:1响应,窗口大小如何变化,图片宽高始终相等

宽高比友好的图像调整

如何在不改变宽高比的情况下调整视频大小?

宽高比友好的方形图像调整

如何找到适合预定尺寸的宽高比 4:3 的尺寸?

调整位图的大小,保持宽高比,不会出现失真和裁剪