例項QT程式 —— Qt單例不規則介面程式
目錄
1.簡介
本文主要介紹瞭如何實現Qt單例不規則介面程式,重點內容包含
- 如何實現單例程式;
- 如何實現不規則介面。
本文還有動態效果圖、重點講解和原始碼,讀者們可以方便檢視學習和交流。
回目錄
2.效果圖
3.重點講解
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;
}
下面是重複啟動程式時的提示警告資訊:
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"));
}
4.原始碼
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
Ui::Widget *ui;
QPoint m_PointDrag; //儲存相對距離
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>
#include <QPoint>
#include <QPixmap>
#include <QPainter>
#include <QPushButton>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//新建一個Pixmap物件
QPixmap pixmap;
//載入圖片
pixmap.load(":/66.png");
//固定視窗大小,將視窗大小設定為圖片大小
setFixedSize( pixmap.width(), pixmap.height() );
//給視窗去掉邊框,設定視窗的flags
setWindowFlags(Qt::FramelessWindowHint | windowFlags() );
//設定透明背景
setAttribute(Qt::WA_TranslucentBackground);
}
Widget::~Widget()
{
delete ui;
}
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);
}
}
void Widget::paintEvent(QPaintEvent */*event*/)
{
QPainter painter(this);
// 重新繪製圖片
painter.drawPixmap(0, 0, QPixmap(":/66.png"));
}
加油,向未來!GO~
Come on!
相關文章
- 例項QT程式 —— Qt自繪製小時鐘QT
- Qt繪圖淺析與例項QT繪圖
- vlc qt player 播放器開發例項QT播放器
- iptables 常用規則使用例項
- Qt5雙緩衝機制與例項QT
- C# Winform程式介面優化例項C#ORM優化
- html5 canvas 實現光線沿不規則路徑運動例項程式碼HTMLCanvas
- Qt5MV自定義模型與例項淺析QT模型
- 基於QT錄製PCM音訊例項詳細QT音訊
- Qt自定義訊號槽的使用淺析+例項QT
- FreeSWITCH測試撥號規則例項
- 簡單介紹正規表示式拆分url例項程式碼
- python 單一程式例項 實現Python
- JavaScript 表單驗證程式碼例項JavaScript
- QT OPENGL 與 shader 繪製展示視訊程式碼例項 OPenGL直接顯示YUV資料QT
- 以QT為例談環境搭建QT
- 淡入淡出效果簡單程式碼例項
- 多程式介面開發-Qt試玩兒QT
- 單例模式入門講解C++和Qt5單例模式C++QT
- led驅動程式例項
- dom操作程式碼例項
- css梯形程式碼例項CSS
- AWS EC2 例項型別命名規則型別
- 正則實現個位數補零程式碼例項
- QT 控制檯訊號與槽簡例QT
- Python訪問小程式簡單方法程式碼例項詳解Python
- Qt大型工程開發技術選型Part3:Qt呼叫C#編寫的COM元件例項QTC#元件
- 正則式 REGEX - 例項
- Qt Creator程式設計之正規表示式QT程式設計
- 設計模式例項程式碼設計模式
- Jmeter beanshell程式設計例項JMeterBean程式設計
- JavaScript in運算子程式碼例項JavaScript
- KafKa Java程式設計例項KafkaJava程式設計
- table表格美化程式碼例項
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- html實現簡單ListViews效果的例項程式碼HTMLView
- 例項程式碼詳解正規表示式匹配換行
- 純css tab選項卡程式碼例項CSS