Qt之自定义界面(窗体缩放)
生活随笔
收集整理的這篇文章主要介紹了
Qt之自定义界面(窗体缩放)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡述
通過前兩節內容,我們實現了自定義窗體的移動,以及自定義標題欄-用來顯示窗體的圖標、標題,以及控制窗體最小化、最大化、關閉。
在這之后,我們還缺少窗體的縮放-當鼠標移動到窗體的邊框-左、上、右、下、左上角、左下角、右上角、右下角時候,鼠標變為相應的樣式,并且窗體可以隨著鼠標拖動而進行放大、縮小。
- 簡述
- 效果
- 窗體縮放
- 實現
- 接口說明
效果
窗體縮放
實現
包含頭文件與需要用到的庫
#ifdef Q_OS_WIN #include <qt_windows.h> #include <Windowsx.h> #endif使用nativeEvent進行窗體縮放
bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *result) {Q_UNUSED(eventType)MSG *param = static_cast<MSG *>(message);switch (param->message){case WM_NCHITTEST:{int nX = GET_X_LPARAM(param->lParam) - this->geometry().x();int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y();// 鼠標區域位于標題欄按鈕之上,則不進行處理QList<QPushButton *> buttons = m_pTitleBar->findChildren<QPushButton *>();foreach (QPushButton *pButton, buttons){if (pButton->geometry().contains(QPoint(nX, nY))){*result = HTCLIENT;return true;}}// 鼠標區域位于標題欄中,進行移動if (nX >= m_nBorder && nX <= this->width() - m_nBorder&& nY >= m_nBorder && nY <= m_pTitleBar->height()){*result = HTCAPTION;return true;}// 鼠標區域位于窗體邊框,進行縮放if ((nX > 0) && (nX < m_nBorder))*result = HTLEFT;if ((nX > this->width() - m_nBorder) && (nX < this->width()))*result = HTRIGHT;if ((nY > 0) && (nY < m_nBorder))*result = HTTOP;if ((nY > this->height() - m_nBorder) && (nY < this->height()))*result = HTBOTTOM;if ((nX > 0) && (nX < m_nBorder) && (nY > 0)&& (nY < m_nBorder))*result = HTTOPLEFT;if ((nX > this->width() - m_nBorder) && (nX < this->width())&& (nY > 0) && (nY < m_nBorder))*result = HTTOPRIGHT;if ((nX > 0) && (nX < m_nBorder)&& (nY > this->height() - m_nBorder) && (nY < this->height()))*result = HTBOTTOMLEFT;if ((nX > this->width() - m_nBorder) && (nX < this->width())&& (nY > this->height() - m_nBorder) && (nY < this->height()))*result = HTBOTTOMRIGHT;return true;}}return QWidget::nativeEvent(eventType, message, result); }接口說明
Qt5與Qt4其中的一個區別就是用nativeEvent代替了winEvent。
nativeEvent主要用于進程間通信-消息傳遞。在這里我們主要進行窗體縮放,其中還添加了一些限制,比如:
使用這種方式后,窗體就可以隨意縮放了,而且可以去掉標題欄中控制界面移動的代碼-在mousePressEvent中使用SendMessage來進行移動。
當然,這種實現只能在Windows下使用,因為用的是Win API,如果需要跨平臺的話,需要自己處理各種事件,而且得考慮的很全面。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Qt之自定义界面(窗体缩放)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《解释的工具:生活中的经济学原理 读书笔
- 下一篇: 最大连接数的配置