qt 自定义最大化,最小化,还原,解决还原位置不对等问题

//初始化最大化/还原、最小化,关闭的按钮,并关联槽函数
CloseButton= new QPushButton(this);
maxButton= new QPushButton(this);
mixButton= new QPushButton(this);
initRightButton();
connect(CloseButton,&QPushButton::clicked,this,&helloWord::closesWindow);
connect(maxButton,&QPushButton::clicked,this,&helloWord::maxsWindow);
connect(mixButton,&QPushButton::clicked,this,&helloWord::mixsWindow);

helloWord::~helloWord()
{
delete ui;
}
//初始化按钮的位置(右上角)
void helloWord::initRightButton(int x, int y)
{

CloseButton->setGeometry(this->frameGeometry().width()-closeWidght,this->pos().y(),closeWidght,closeHeight);
CloseButton->setStyleSheet(QString("QPushButton{border-image:url(:/new/prefix1/image/close.png);}"
                                   "QPushButton:hover{border-image:url(:/new/prefix1/image/close(hieght).png)}"));

maxButton->setGeometry(this->frameGeometry().width()-closeWidght-maxWidght,this->pos().y(),maxWidght,maxHeight);

mixButton->setGeometry(this->frameGeometry().width()-closeWidght-maxWidght-mixWidght,this->pos().y(),mixWidght,mixHeight);
mixButton->setStyleSheet(QString("QPushButton{border-image:url(:/new/prefix1/image/mix.png);}"));

}

void helloWord::closesWindow()
{
this->close();
}
//实现最大化/最小化功能,并解决还原位置不对的问题
void helloWord::maxsWindow()
{

qDebug()<<rect0.x()<<rect0.y();
if(WindowMarker ==0)
{
    //记住原来的位置
    rect0 = geometry();
    Sourcex = rect0.x();
    Sourcey = rect0.y();

// //获取分辨率
QScreen* screen=QGuiApplication::primaryScreen ();
QRect mm=screen->availableGeometry() ;
int Maxnum =mm.width();
int Mixnum =mm.height();
//设置最大化
setFixedSize(Maxnum,Mixnum);

     move(0,0);
    initRightButton();
    WindowMarker =1;

}else if(WindowMarker == 1)
{
    //设置界面大小
    setFixedSize( Sourcewidght,SourceHeight);
    //初始化按钮位置
     initRightButton();
    qDebug()<<Sourcex<<Sourcey;
    //还原位置
    move(Sourcex,Sourcey);

    WindowMarker =0;
}

}
//实现最小化功能
void helloWord::mixsWindow()
{
showMinimized();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 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 平台上的关闭、最大化最小化按钮的显示和行为。这种方式可以增强用户体验,让应用程序更加个性化和易用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫回首�

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值