1. 程式人生 > >【Qt】Qt之自定義介面(實現無邊框、可移動)【轉】

【Qt】Qt之自定義介面(實現無邊框、可移動)【轉】

簡述

UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。

愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的介面會給人帶來舒適的視覺享受,拉近人與產品的距離,是建立在科學性之上的藝術設計。

檢驗一個介面的標準-既不是某個專案開發組領導的意見,也不是專案成員投票的結果,而是終端使用者的感受。

所以,對於大多數商業軟體或者專業產品來說,Qt的本地化樣式顯然已經不能滿足期望,我們需要進行大量的樣式美化,才能夠讓它更有個性、有品位。

下面我們來實現這樣一個介面。

這裡寫圖片描述

無邊框

設定視窗標誌為無邊框

setWindowFlags(Qt::FramelessWindowHint | windowFlags());

關於WindowFlags列舉值很多,其中有一個WindowStaysOnTopHint,可以讓窗體位於所有介面之上,類似於QQ主面板,一開啟就在所有軟體之上-比較霸道。

設定無邊框之後,窗體是無法移動的,下面我們介紹兩種方式來進行移動。

可移動

Qt事件

// 滑鼠相對於窗體的位置 event->globalPos() - this->pos()
void Widget::mousePressEvent(QMouseEvent *event
) { if (event->button() == Qt::LeftButton) { m_bPressed = true; m_point = event->pos(); } } // 若滑鼠左鍵被按下,移動窗體位置 void Widget::mouseMoveEvent(QMouseEvent *event) { if (m_bPressed) move(event->globalPos() - m_point); } // 設定滑鼠未被按下 void Widget::mouseReleaseEvent(QMouseEvent *event
) { Q_UNUSED(event); m_bPressed = false; }

Win API

包含標頭檔案與需要用到的庫

#ifdef Q_OS_WIN
#pragma comment(lib, "user32.lib")
#include <qt_windows.h>
#endif

傳送系統訊息,進行移動

void Widget::mousePressEvent(QMouseEvent *event)
{
#ifdef Q_OS_WIN
    if (ReleaseCapture())
           SendMessage(HWND(winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
       event->ignore();
#else
#endif
}

相關推薦

QtQt定義介面實現邊框移動

簡述 UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。 愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的介面會給人帶來舒適的視覺享受,拉近人與產品的

Qt 定義介面實現邊框移動

簡述 UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。 愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的

QtQt定義介面窗體縮放-跨平臺終極版

簡述 通過上一節內容,我們實現了窗體的縮放,功能很不錯,但是很遺憾-不支援跨平臺!如果對於多平臺來說,這是一個硬傷,所以,我們急需要一個能夠支援跨平臺的實現方案。 在網上看到過很多不同的實現方式,多多少少會存在一些問題-要麼融合度太高、要麼不能很好地進行移動、縮放。基於前人的分享與總結,最後,我花了很

QtQt定義介面右下角冒泡

簡述 網頁右下角上經常會出現一些提示性的資訊,桌面軟體中也比較常見,類似360新聞、QQ訊息提示一樣! 這種功能用動畫實現起來很簡單,這節我們暫時使用定時器來實現,後面章節會對動畫框架進行詳細講解。 下面我們來實現一個右下角冒泡的功能。 簡述 效果 實現原理 實現 效果

QtQt定義介面QMessageBox

簡述 通過前幾節的自定義窗體的學習,我們可以很容易的寫出一套屬於自己風格的介面框架,通用於各種窗體,比如:QWidget、QDialog、QMainWindow。 大多數窗體的實現都是採用控制元件堆積來完成的,只要思路清晰,再複雜的介面實現起來都遊刃有餘。下面我來列舉一個由QMessageBox擴充套

QtQt定義介面窗體縮放

簡述 通過前兩節內容,我們實現了自定義窗體的移動,以及自定義標題欄-用來顯示窗體的圖示、標題,以及控制窗體最小化、最大化、關閉。 在這之後,我們還缺少窗體的縮放-當滑鼠移動到窗體的邊框-左、上、右、下、左上角、左下角、右上角、右下角時候,滑鼠變為相應的樣式,並且窗體可以隨著滑鼠拖動而進行放大、縮小。

QtQt定義介面新增定義標題欄

簡述 通過上節內容,我們實現了自定義窗體的移動,但是我們缺少一個標題欄來顯示窗體的圖示、標題,以及控制窗體最小化、最大化、關閉的按鈕。 自定義標題欄後,所有的控制元件我們都可以定製,比如:在標題欄中新增換膚、設定按鈕以及其他控制元件。 簡述 效果 自定義標題欄 實現 介面說明

Qt 定義介面右下角冒泡

簡述 網頁右下角上經常會出現一些提示性的資訊,桌面軟體中也比較常見,類似360新聞、QQ訊息提示一樣! 這種功能用動畫實現起來很簡單,這節我們暫時使用定時器來實現,後面章節會對動畫框架進行詳細講解。 下面我們來實現一個右下角冒泡的功能。 | 效果

Qt 定義介面QMessageBox

簡述 通過前幾節的自定義窗體的學習,我們可以很容易的寫出一套屬於自己風格的介面框架,通用於各種窗體,比如:QWidget、QDialog、QMainWindow。 大多數窗體的實現都是採用控制元件堆積來完成的,只要思路清晰,再複雜的介面實現起來都遊刃有餘。下

Qt實現窗體的邊框移動透明不規則顯示需背景透明的圖片

用Qt可以做出很炫的介面,更多的功能還有待學習^_^! 1、建構函式中需要做的設定: [cpp] view plaincopyprint? this->setWindowOpacity(1);//設定窗體不透明 this->setWind

QT-模型檢視定義委託

檢視委託(Delegate)簡介 由於模型負責組織資料,而檢視負責顯示資料,所以當用戶想修改顯示的資料時,就要通過檢視中的委託來完成 檢視委託類似於傳統的MVC設計模式裡的Controller(控制器)角色 Model(模型) - 負責資料組織 View(檢視)&n

BLE-CC2640CC2640定義週期事件

本篇博文最後修改時間:2017年06月02日,00:29。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何使用系統提供的定時器執行一個自定義的週期事件。 二、實驗平臺 協議棧版本:ble_cc26xx_2_01_00_44423

Android定義裝置管理

需求:控制手機的攝像頭和錄音全部禁用~     這篇文章使用android提供的裝置管理器類DeviceAdminReceiver ,來實現禁用手機攝像頭的功能,還能夠改變密碼,鎖屏,重啟等功能,具體功能請去查API,如果我沒記錯的話有5千多行... ... 但是這篇文章主

Qt定義外掛for Qt Designer

QLedPlugin::QLedPlugin(QObject *parent) : QObject(parent) { initialized = false; } void QLedPlugin::initialize(QDesignerFormEditorInterface * )

SpringMVC總結定義註解例:許可權註解

目錄 1.前言 2.自定義一個註解 3. 定義一個相應的攔截器 4.在springMVC配置檔案中進行配置 5.在springMVC controller中使用例項 1.前言 在開發過程中,我們想給控制器的某些方法進行控制訪問許可權,或者我們需要做方法呼叫日誌記錄

android定義View定義EditText新增刪除功能

           忙忙碌碌20天,新的專案終於接近尾聲了。今天公司召集幾個使用者體驗師和美工一起吐糟這20天做的這個新產品,對於產品提出了很多建議,這幾天就改介面了。在這個專案中大量的使用了EditText元件,並且添加了刪除功能。這裡面都是用RelativeLayou

安卓開發學習定義Toast的實現

背景 吐司提示很常見,但系統的吐司有一個缺點,就是顯示時長不能自定義,而自定義Toast可以實現這一點   實現步驟 整體思路是:活動視窗發出彈出吐司請求,然後中間層接收請求,發給排程層,排程層顯示吐司 這裡請求的傳遞就是方法的呼叫,顯示和消除吐司的關鍵是呼叫windo

開發懸浮球SDK定義view流量球上篇 — 水波紋(波浪線)

本人開發懸浮球SDK大致流程及過程中遇到的問題和解決方法我會寫到我的部落格中。 (關於Paint 類,Path類,Canvas類相關具體詳解,請您拉到本部落格下方,點選連結方便您學習哦!) 自定義view的核心方法 onMeasure(int widthMeasureSpec,int hei

Android 定義佈局繼承控制元件

就是繼承已有的控制元件,建立新控制元件,保留繼承的父控制元件的特性,並且還可以引入新特性。下面就以支援橫向滑動刪除列表項的自定義ListView的實現來介紹。 1、建立刪除按鈕佈局delete_btn.xml,這個佈局是在橫向滑動列表項後顯示的: <?xml version="1.0" en

Android進階定義View1實現換行的TextView

         今天來一起學習一下最簡單的自定義view,自己動手寫一個MyTextView,當然不會像系統的TextView那麼複雜,只是實現一下TextView的簡單功能,包括分行顯示及自定義屬性的處理,主要目的是介紹自定義view的實現的基本思路和需要掌握的一些基礎知