1.简介 2.效果图 3.重点讲解 4.源码
本文主要介绍了如何实现Qt单例不规则界面程序,重点内容包含
如何实现单例程序;如何实现不规则界面。本文还有动态效果图、重点讲解和源码,读者们可以方便查看学习和交流。
回目录Qt单例不规则界面程序
回目录
1)如何实现单例程序
通过共享内存QSharedMemory实例来限制同一个程序的重复启动 。
QSharedMemory *sharedMemory = new QSharedMemory("SingleApp"); sharedMemory->attach(); if(!sharedMemory->create(1)) { QMessageBox::warning(0,QObject::tr("Warning"), QObject::tr("The program is running!")); delete sharedMemory; a.exit(0); return 0; }下面是重复启动程序时的提示警告信息:
Qt单例不规则界面程序重复启动警告提示
2)如何实现不规则界面
新建一个Pixmap对象加载图片;固定窗口大小,将窗口大小设置为图片大小;给窗口去掉边框,设置窗口的flags;设置透明背景。 //新建一个Pixmap对象 QPixmap pixmap; //加载图片 pixmap.load(":/66.png"); //固定窗口大小,将窗口大小设置为图片大小 setFixedSize( pixmap.width(), pixmap.height() ); //给窗口去掉边框,设置窗口的flags setWindowFlags(Qt::FramelessWindowHint | windowFlags() ); //设置透明背景 setAttribute(Qt::WA_TranslucentBackground);不规则界面的移动操作需要重新实现鼠标点击和移动事件。
protected: void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void Widget::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton){ // 求出窗口移动之前的坐标 m_PointDrag = event->globalPos()-frameGeometry().topLeft(); } if(event->button() == Qt::RightButton){ // 鼠标右键关闭窗口 close(); } } void Widget::mouseMoveEvent(QMouseEvent *event) { if(event->buttons() & Qt::LeftButton) { // 如果是鼠标左键拖动, 移动窗口 move(event->globalPos() - m_PointDrag); } }不规则界面还需要重新绘制背景图片。
protected: void paintEvent(QPaintEvent *event); void Widget::paintEvent(QPaintEvent */*event*/) { QPainter painter(this); // 重新绘制图片 painter.drawPixmap(0, 0, QPixmap(":/66.png")); }回目录
源码下载地址 https://download.csdn.net/download/Redboy_Crazy/12988058
widget.hwidget.cpp回目录
加油,向未来!GO~ Come on!