Qt小技巧之重写点击最大化按钮时响应

 引言

       使用QT进行显示图片的时候,点击自带最大化按钮就可将主窗口调整到所使用的电脑屏幕分辨率的大小,但是如果刚启动时显示的图片在确定比例下显示正常,而这个比例如果和屏幕宽高比不一致,那么整个窗口放大后图片就会左右或上下被拉长而发生显示上的形变,我们可以通过重写窗口改变时的响应事件void QWidget::changeEvent(QEvent *event)来调整点击最大化按钮后的窗口比例。changeEvent可以重写来处理状态的改变,在此函数里通过判断事件的类型及window窗口的状态来调整响应的行为。

具体实现如下

函数声明:

void changeEvent(QEvent * event);

函数实现:

void changeEvent(QEvent * event)
{
    if (this->windowState() == Qt::WindowMaximized)
    {
        this->resize(1920, 768);
    }
    else
    {
        this->resize(1767, 498);
    }
}

 当窗口发生改变的时候,就会触发changeEvent响应,然后我们通过判断窗口的状态即windowState是否为窗口最大化,如果是的话,就把窗口大小resize成自己想要的比例。

参考

1. https://doc.qt.io/qt-5/qwidget.html#changeEvent;
2. https://doc.qt.io/qt-5/qt.html#WindowState-enum.

 

Qt中,如果你想隐藏窗口的最大化和最小化按钮,你可以通过设置窗口样式和装饰边框来实现。下面是一个简单的步骤: 1. **创建窗口**: 首先,在`QMainWindow`或者其他的窗体类中初始化窗口。 ```cpp QMainWindow *mainWindow = new QMainWindow(); ``` 2. **设置窗口风格**: 使用`setWindowFlags()`方法,并指定`Qt::WindowNoTitleBar`和`Qt::CustomizeWindowHint`,前者会移除标题栏,后者允许自定义窗口外观。 ```cpp mainWindow->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::WindowNoTitleBar | Qt::CustomizeWindowHint); ``` 这里使用了`Qt::FramelessWindowHint`来移除边框,`Qt::WindowStaysOnTopHint`可以让窗口始终保持在最上层。 3. **禁止最大化和最小化操作**: 虽然设置了`Qt::WindowNoTitleBar`,系统默认的图标还是可用的。如果你也想禁用它们,可以在`show()`函数之前重绘窗口,覆盖默认图标。 ```cpp void MainWindow::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setPen(Qt::NoPen); painter.setBrush(Qt::black); painter.drawRect(rect()); } // 然后在show()函数里调用这个方法 mainWindow->show(); ``` 4. **注意事件处理**: 如果你需要处理用户试图点击最大化/最小化按钮的行为,可以添加鼠标点击事件处理器并阻止默认行为。 现在,窗口将没有标题栏,也没有最大化和最小化按钮。然而,这并不意味着完全禁止用户手动调整大小,因为窗口边缘通常还是可拖动的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值