1. 在头文件中添加下列三个函数 //鼠标点击标题栏,重新实现拖动操作 void mouseMoveEvent(QMouseEvent*event); void mousePressEvent(QMouseEvent*event); void mouseReleaseEvent(QMouseEvent*event); 2. 在头文件中添加下列三个槽函数 private slots: void actionMin(); //最小化窗口 void actionMax(); //最大化窗口 void actionClose(); //关闭窗口 3.在头文件中下列变量 QPoint mousePosition; //自己实现拖动操作 bool isMousePressed; //自己实现拖动操作 QToolButton *minButton; //最小化按钮 QToolButton *maxButton; //最大化按钮 QToolButton *closeButton; //关闭按钮 QLabel *labelTitle; //软件名称 QLabel *iconLabel; //软件图标 bool maxNormal; //判断是否最大化标志位 QPixmap normalPix; //缩小图标 QPixmap maxPix; //最大化图标 4.定义鼠标可拖动区域 /********************鼠标作用域******************/ using namespace std; const static int posMinX=0; const static int posMaxX=20000; const static int posMinY=0; const static int posMaxY=40; 5.在构造函数中添加进行初始化 minButton=new QToolButton(this); //最小化按钮 maxButton=new QToolButton(this); //最大化按钮 closeButton=new QToolButton(this); //关闭按钮 iconLabel=new QLabel(this); //图标按钮 labelTitle=new QLabel(this); //软件标题 int width=this->width(); //获取软件占得像素大小 this->setMinimumSize(900,600); //设置最小窗口 this->resize(QSize(900,600)); //初始化窗口显示大小 this->setWindowFlags(Qt::FramelessWindowHint); //去掉标题栏 QDesktopWidget *desktop=QApplication::desktop(); this->move((desktop->width()-this->width())/2, (desktop->height()-this->height())/2); //程序显示在屏幕中间 /****************加载图标*******************/ Qpixmap closePix =style()->standardPixmap(QStyle::SP_TitleBarCloseButton); closeButton->setIcon(closePix); MaxPix =style()->standardPixmap(QStyle::SP_TitleBarMaxButton); maxButton->setIcon(maxPix); QPixmap minPix =style()->standardPixmap(QStyle::SP_TitleBarMinButton); minButton->setIcon(minPix); normalPix =style()->standardPixmap(QStyle::SP_TitleBarNormalButton); /*****************加载位置******************/ iconLabel->setGeometry(10,7,22,22); labelTitle->setGeometry(34,4,120,30); minButton->setGeometry(width-96,6,30,30); maxButton->setGeometry(width-66,6,30,30); closeButton->setGeometry(width-36,6,30,30); /******************提示信息*****************/ minButton->setToolTip(tr('最小化')); maxButton->setToolTip(tr('最大化')); closeButton->setToolTip(tr('关闭')); ui->actionConn->setToolTip(tr('打开串口')); labelTitle->setText(tr('雷达')); /*****************添加背景颜色**************/ minButton->setStyleSheet('background-color:transparent;'); maxButton->setStyleSheet('background-color:transparent;'); closeButton->setStyleSheet('background-color:transparent;'); setWindowIcon(QIcon(':/new/prefix1/RES/radar.png')); maxNormal=false; //是否最大化 isMousePressed=false; //鼠标是否被按下 /******************信号与槽连接**************/ //最小化按钮 connect(minButton,SIGNAL(clicked(bool)),SLOT(actionMin())); //最大化按钮 connect(maxButton,SIGNAL(clicked(bool)),SLOT(actionMax())); //关闭按钮 connect(closeButton,SIGNAL(clicked(bool)),SLOT(actionClose())); QFont font('ZYSong',11); //字体大小为宋体11号字体 labelTitle->setFont(font); //设置字体 setPalette(QPalette(Qt::DownArrow));//设置背景色 setAutoFillBackground(true); 6.在函数中实现 /***************最小化************************/ void RadarWindow::actionMin() { showMinimized(); } /***************最大化************************/ void RadarWindow::actionMax() { if(maxNormal) { this->showNormal(); maxNormal=!maxNormal; maxButton->setIcon(maxPix); } else { this->showMaximized(); maxNormal=!maxNormal; maxButton->setIcon(normalPix); } } /***************关闭************************/ void RadarWindow::actionClose() { close(); //关闭 } /***************鼠标移动********************/ void RadarWindow::mouseMoveEvent(QMouseEvent *event) { if(maxNormal) { return; } if(isMousePressed==true) { QPoint movePot=event->globalPos()-mousePosition; move(movePot); } } /***************鼠标点击*******************/ void RadarWindow::mousePressEvent(QMouseEvent *event) { mousePosition=event->pos(); //当鼠标单击窗体准备拖动时,初始化鼠标在窗体中的相对位置 //只对标题栏范围内的鼠标事件进行处理 if(mousePosition.x()<=posMinX) { return; } if(mousePosition.x()>=posMaxX) { return; } if(mousePosition.y()<=posMinY) { return; } if(mousePosition.y()>=posMaxY) { return; } isMousePressed=true; } /***************鼠标释放*******************/ void RadarWindow::mouseReleaseEvent(QMouseEvent *event) { isMousePressed=false; } /***************自动保存******************/ void RadarWindow::on_pushButtonSave_clicked() { if(!ok) { return; } if(ui->pushButtonSave->text()==tr('停止保存')) { ui->pushButtonSave->setText(tr('保存')); if(fileOk) { fileSave->close(); delete fileSave; fileOk=false; } } else if (ui->pushButtonSave->text()==tr('保存')) { ui->pushButtonSave->setText(tr('停止保存')); } } 7.在函数中实现将窗口画成圆角形窗口 /***************画图函数************************/ void MainWindow::paintEvent(QPaintEvent *) { QBitmap objBitmap(size()); //生成一张位图 QPainter painterBit(&objBitmap); //在位图上绘画 painterBit.fillRect(rect(),Qt::white);//填充位图矩形框 painterBit.setBrush(QColor(0,0,0)); //位图上画圆角矩形 painterBit.drawRoundedRect(this->rect(),10,10); setMask(objBitmap); //使用setMark过滤即可 } 效果如图下所示:
|
|
来自: 芥子c1yw3tb42g > 《谋生之道-自律自由》