QT_QWidget实现去除原边框,自定义边框(最大化、最小化、关闭按钮)、可拆分窗口部件、拖动窗体和缩放、样式表美化部件窗口

[去除原边框]

this->setWindowFlags(Qt::FramelessWindowHint);    //取消窗体的标题栏    setMouseTracking(true);//MouseMoveEvent为了不太耗资源在默认状态下是要鼠标按下才能捕捉到,要想鼠标不按下时的移动也能捕捉到设置为true。
注意关于setMouseTracking(true)设置后无效的情况:
如果在子类上响应鼠标事件,只会触发子类的 mouseMoveEvent,根据C++继承和重载的原理,所以子类也要 setMouseTracking(true);
所以如果你想响应鼠标事件的控件被某个父控件包含,则该控件及其父控件或容器也需要 setMouseTracking(true);比如ui->widget->setMouseTracking(true)等等。

[自定义最大化、最小化、关闭按钮]

void Widget::on_pb_Min_clicked()
{
    setWindowState(Qt::WindowMinimized);
}
void Widget::on_pb_Max_clicked()
{
    if (windowmax) {
        this->showMaximized();
        ui->pb_Max->setText("❐");
        windowmax = 0;
    } else {
        this->showNormal();
        ui->pb_Max->setText("□");
        windowmax = 1;
    }
}
void Widget::on_pb_Close_clicked()
{
    close();
}

[可拆分窗口部件]

//添加 splitter
    QSplitter *splitter = new QSplitter(Qt::Horizontal,nullptr);
    splitter->addWidget(ui->widget_3);
    splitter->addWidget(ui->widget_4);
    ui->widget_2->layout()->addWidget(splitter);
    splitter->setMouseTracking(true);
    //设置拉伸比例
    //setStretchFactor方法的参数分别是子控件索引、拉伸参数
    splitter->setStretchFactor(0, 3);
    splitter->setStretchFactor(1, 7);

[拖动窗体和缩放]

1.重写这三个函数

void mousePressEvent(QMouseEvent *event) override;//获取鼠标的移动
void mouseMoveEvent(QMouseEvent *event) override;//获取鼠标的点击
void mouseReleaseEvent(QMouseEvent *event) override;//获取鼠标的释放

2.设计窗体的结构用代号来表示。

具体见链接代码

3.可以实现窗体四周拉伸、整体拖动。

[样式表美化部件窗口]

具体见链接代码

[链接]QT-QWidget实现去除原边框,自定义边框(最大化、最小化、关闭按钮)、可拆分窗口部件、拖动窗体和缩放、样式表美化部件窗口资源-CSDN文库

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Mac 端使用 Qt 开发应用程序时,关闭最大化最小化按钮的样式与 Windows 平台有所不同。如果想要自定义这些按钮的显示和行为,可以通过设置样式表和重写窗口事件的方式来实现。 首先,可以通过样式表设置关闭最大化最小化按钮的图标和位置。例如,下面的样式表关闭按钮设置在窗口右上角: ``` QMainWindow::closeButton { image: url(close.png); subcontrol-origin: margin; subcontrol-position: top right; margin: 4px; } ``` 然后,在窗口类中重写 QWidget::nativeEvent() 函数来处理系统事件。例如,可以拦截 QEvent::WindowCloseButtonHintChanged 事件,以修改关闭按钮的行为: ``` bool MyWindow::nativeEvent(const QByteArray &eventType, void *message, long *result) { if (eventType == "com.apple.HIToolbox.events" && result) { HIEvent *event = static_cast<HIEvent *>(message); if (event->what == kEventWindowCloseButtonHit) { // Do something when close button clicked *result = 0; return true; } } return QMainWindow::nativeEvent(eventType, message, result); } ``` 在处理关闭按钮点击事件时,可以执行自定义关闭操作,并将结果返回到 result 中。类似地,在处理最大化最小化按钮事件时,可以使用 QEvent::WindowMaximizeButtonHintChanged 和 QEvent::WindowMinimizeButtonHintChanged 事件。需要注意的是,这种方式只适用于 Mac 平台,不能在其他平台上使用。 总之,通过设置样式表和重写窗口事件,可以自定义 Qt 应用程序在 Mac 平台上的关闭最大化最小化按钮的显示和行为。这种方式可以增强用户体验,让应用程序更加个性化和易用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值