由于项目中有pjsip,需要退出软件时注销掉,所以自己写了退出和最小化的按键和槽函数,但是发现银河麒麟系统自带了最大化最小化和关闭按键,这样就导致了如果点击系统自带关闭时没有注销sip会影响下次使用
MainWindow w;
#ifdef COMPILE_KYLIN
// 银河麒麟下关闭系统自带的最小化按键和关闭按键
w.setMaximumSize(QSize(1920,1080));
w.setMinimumSize(QSize(1920,1080));
w.setWindowFlags(Qt::WindowCloseButtonHint);
#endif
w.show();
前两句是固定整个窗口的大小,如果不固定窗口大小就直接设置w.setWindowFlags(Qt::WindowCloseButtonHint);
让最大化和最小化按钮失去效用(加上上面两句,按钮不会消失,最大化按钮无效用,但是最小化按钮还是可以用的)
Qt去掉最大化和最小化以及关闭按钮 :在MainWindow构造函数中调用this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint);
这样会把标题栏都去掉。
/** 客户端关闭 */
void MainWindow::on_btn_closed_clicked()
{
// 启动定时器
closeTimer = new QTimer(this);
connect(closeTimer, SIGNAL(timeout()), this, SLOT(windowsClose_timeout()));
closeTimer->start(1000);
// 显示关闭进度,弹出一个关闭的动画效果
if(my_closetip)
my_closetip->show();
// 关闭所有窗口
close_all();
// 保存数据库
dbBak_saveDb2File();
}
/** 客户端关闭定时器函数 */
void MainWindow::windowsClose_timeout(void)
{
// 关闭定时器
closeTimer->stop();
// 线程退出
m_initThread->quit();
m_initThread->wait();
m_initThread->deleteLater();
// 注销SIP
m_call->destroy();
// 退出主程序
QApplication* app;
app->quit();
}
上面是自己写的软件关闭按键的槽函数以及定时器函数,真正退出软件在最后两句
// 退出主程序
QApplication* app;
app->quit();
自己写的客户端最小化的按键槽函数
/** 客户端最小化 */
void MainWindow::on_btn_minimum_clicked()
{
this->showMinimized();
}