青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::

From: http://blog.csdn.net/kfbyj/article/details/9284923


最近做項目遇到的問題,總結下。

有時候我們覺得系統的標題欄和按鈕太丑太呆板,想做自己的標題欄以及最大化、最小化、關閉,菜單按鈕,我們就需要 

  1. setWindowFlags(Qt::FramelessWindowHint);  
但是這樣過后,我們就不能拖動窗口改變位置,以及拖動邊緣改變窗口大小了。

有兩種方案處理這種情況:

1.自己對mouseMoveEvent,mousePressEvent,mouseReleaseEvent 等事件進行處理。

2.Qt可以處理windows的消息。大家重新實現bool winEvent(MSG *message, long *result);(在此又一次感覺Qt的NB)


我剛開始使用第一種方法去實現的。移動窗口很容易做,大家可以去看看這個大大寫的,比網上其他版本問題少些。

http://blog.csdn.net/aqtata/article/details/8902889

在窗口邊緣按下鼠標拖動改變窗口大小就比較麻煩了。

我是這樣做的:

在mousePressEvent 按下設置m_bPressed為真。

在mouseMoveEvent中m_bPressed為真且event->x() 在窗口邊緣 及處理算出鼠標移動的增量 然后不斷resize窗口。

至于如何為邊緣的斷定,就自己設定一個 差值 假如 在窗口邊緣 ±4個px 就算在在該邊緣就處理該resize。

這樣做缺點很多,1.拖快了不行,很容易超過該差值 , 2.窗口抖動的厲害,一直在resize,3.要處理太多情況


鑒于上訴缺點于是乎就到處問人百度google。有了第二種方法:

第二種方法很好用,效果和有標題邊框程序一樣~~~

Qt居然可以處理windows消息。。

這里我們要重新實現winEvent ( MSG * message, long * result ) 

該虛函數在QWidget和QWizard以及QSizeGrip以及他們的子類中都可以實現。

如果你想停止Qt處理消息就返回true,并且設置result到你想要保存的值返回給window處理。否者的話返回false。

這里我們主要想處理WM_NCHITTEST消息。

The WM_NCHITTEST message is sent to a window in order to determine what part of the window corresponds to a particular screen coordinate. This can happen, for example, when the cursor moves, when a mouse button is pressed or released, or in response to a call to a function such as WindowFromPoint. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse.

A window receives this message through its WindowProc function. 

WM_NCHITTEST的消息響應函數會根據鼠標當前的坐標來判斷鼠標命中了窗口的哪個部位,消息響應函數的返回值指出了部位,例如它可能會返回HTCAPTION,或者HTCLIENT等。(其返回值有很多,請查閱MSDN)。

知道這個就好了,我們還是要判斷下鼠標的位置,然后通過該位置保存到result給window處理。

其實就是我們的程序沒有邊框不能發送這些消息,我們把它告訴windows,然后windows幫我們處理拖動,改變大小等效果。所以效果和有邊框有標題程序效果一樣的。

頭文件申明:

  1. class MainWindow : public QMainWindow  
  2. {  
  3.     Q_OBJECT  
  4. public:  
  5.     MainWindow(QWidget *parent = 0);  
  6.     ~MainWindow();  
  7.   
  8. protected:  
  9.     bool winEvent(MSG *message, long *result);  
  10. };  
CPP實現

  1. bool MainWindow::winEvent(MSG *message, long *result)  
  2. {  
  3.     switch(message->message)  
  4.     {  
  5.     case WM_NCHITTEST:  
  6.         int xPos = GET_X_LPARAM(message->lParam) - this->frameGeometry().x();  
  7.         int yPos = GET_Y_LPARAM(message->lParam) - this->frameGeometry().y();  
  8.         if(this->childAt(xPos,yPos) == 0)  
  9.         {  
  10.             *result = HTCAPTION;  
  11.         }else{  
  12.             return false;  
  13.         }  
  14.         if(xPos > 18 && xPos < 22)  
  15.             *result = HTLEFT;  
  16.         if(xPos > (this->width() - 22) && xPos < (this->width() - 18))  
  17.             *result = HTRIGHT;  
  18.         if(yPos > 18 && yPos < 22)  
  19.             *result = HTTOP;  
  20.         if(yPos > (this->height() - 22) && yPos < (this->height() - 18))  
  21.             *result = HTBOTTOM;  
  22.         if(xPos > 18 && xPos < 22 && yPos > 18 && yPos < 22)  
  23.             *result = HTTOPLEFT;  
  24.         if(xPos > (this->width() - 22) && xPos < (this->width() - 18) && yPos > 18 && yPos < 22)  
  25.             *result = HTTOPRIGHT;  
  26.         if(xPos > 18 && xPos < 22 && yPos > (this->height() - 22) && yPos < (this->height() - 18))  
  27.             *result = HTBOTTOMLEFT;  
  28.         if(xPos > (this->width() - 22) && xPos < (this->width() - 18) && yPos > (this->height() - 22) && yPos < (this->height() - 18))  
  29.             *result = HTBOTTOMRIGHT;  
  30.   
  31.         return true;  
  32.     }  
  33.     return false;  
  34. }  

把各種邊界情況保存到result給windows處理,我們就省去很多事情,我想windows肯定比我們自己實現的效果要好多了。

以上的18 以及 22 是我對程序的邊緣進行判斷的范圍。

因為

我做了邊框陰影。陰影邊框設定為20px所以在

  1. xPos > 18 && xPos < 22 其實就是我們假定的邊框了。  
  1.   
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2013-07-11 19:45 逛奔的蝸牛 閱讀(4212) 評論(0)  編輯 收藏 引用 所屬分類: Qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区在线免费播放| 一区二区三区久久网| 亚洲一级特黄| 国产精品毛片| 久久久av网站| 久久亚洲精品视频| 日韩视频一区二区三区在线播放| 欧美夫妇交换俱乐部在线观看| 暖暖成人免费视频| 亚洲无线视频| 亚洲欧美日韩一区二区三区在线| 国产日韩欧美中文在线播放| 老巨人导航500精品| 免费视频一区二区三区在线观看| 一本色道久久综合亚洲二区三区 | 国产婷婷色一区二区三区四区| 欧美一级大片在线免费观看| 久久精品99国产精品酒店日本| 一区二区三区在线视频免费观看| 欧美成人免费va影院高清| 欧美va亚洲va香蕉在线| 亚洲综合第一| 久久免费高清| 洋洋av久久久久久久一区| 在线视频免费在线观看一区二区| 国产精品一区二区三区四区五区| 久久久久久一区| 欧美日韩另类国产亚洲欧美一级| 欧美一区二区三区免费观看视频| 美女视频黄免费的久久| 亚洲欧美卡通另类91av| 免费看亚洲片| 久久久久久尹人网香蕉| 欧美视频在线看| 免费一级欧美在线大片| 国产精品免费网站| 最新国产乱人伦偷精品免费网站| 国产精品免费看片| 亚洲国产午夜| 韩国自拍一区| 亚洲宅男天堂在线观看无病毒| 亚洲国产精品久久久久婷婷884| 亚洲午夜在线观看视频在线| 亚洲精品午夜精品| 老司机午夜精品视频在线观看| 午夜精彩视频在线观看不卡| 欧美激情综合五月色丁香| 老司机免费视频久久| 国产美女一区| 亚洲午夜在线观看视频在线| 99riav国产精品| 暖暖成人免费视频| 免费欧美网站| 在线精品视频一区二区| 久久不射电影网| 欧美一区亚洲一区| 国产精品毛片| 亚洲图中文字幕| 亚洲欧美日韩精品久久奇米色影视| 欧美激情亚洲自拍| 亚洲国内精品在线| 亚洲精品免费网站| 欧美成人午夜77777| 国产精品网站在线| 在线综合欧美| 亚洲欧美精品在线| 国产精品私房写真福利视频| 一区二区三区国产精华| 亚洲调教视频在线观看| 欧美视频国产精品| 一区二区三区三区在线| 亚洲欧美电影在线观看| 国产精品毛片高清在线完整版| 亚洲一区二区三区在线看| 亚洲一区网站| 国产私拍一区| 裸体丰满少妇做受久久99精品| 免费视频一区二区三区在线观看| 黄色一区二区在线观看| 久久婷婷蜜乳一本欲蜜臀| 欧美激情欧美激情在线五月| 亚洲精品乱码久久久久久日本蜜臀| 欧美精品一区二区三区一线天视频| 日韩视频一区二区| 午夜欧美电影在线观看| 国内精品美女av在线播放| 久久米奇亚洲| 亚洲剧情一区二区| 欧美在线观看日本一区| 国内精品久久久久久| 毛片精品免费在线观看| 日韩午夜激情电影| 久久精品一区四区| 亚洲精品日本| 国产女人水真多18毛片18精品视频| 久久国产加勒比精品无码| 亚洲免费视频一区二区| 欧美黄污视频| 亚洲欧美在线视频观看| 欧美高清视频一区二区| 亚洲最新视频在线播放| 国产区二精品视| 欧美承认网站| 欧美一区二区三区免费观看视频 | 亚洲国产精品成人一区二区 | 欧美国产成人精品| 亚洲一区二区成人| 欧美高清视频一区二区三区在线观看 | 一区二区激情| 米奇777超碰欧美日韩亚洲| av成人免费观看| 精品1区2区3区4区| 欧美视频免费在线观看| 久久嫩草精品久久久久| 这里只有精品丝袜| 亚洲国产日韩在线| 久久久久久久999| 亚洲一区二区免费看| 亚洲人成在线观看一区二区| 国产欧美日韩一区二区三区| 欧美理论电影在线播放| 久久久视频精品| 久久久中精品2020中文| 国产精品99久久不卡二区| 在线观看福利一区| 国产亚洲欧美一级| 国产精品久久久久久久浪潮网站| 久久这里只有| 久久精品视频在线免费观看| 亚洲天堂激情| 夜夜嗨av色一区二区不卡| 欧美寡妇偷汉性猛交| 久久久青草青青国产亚洲免观| 亚洲在线视频观看| 亚洲午夜国产一区99re久久| 亚洲日本精品国产第一区| 一区在线播放| 怡红院av一区二区三区| 伊人狠狠色j香婷婷综合| 国产日韩在线看片| 国产午夜精品久久| 国产亚洲一二三区| 国产欧美日韩伦理| 国产麻豆9l精品三级站| 国产精品美女一区二区| 国产精品私房写真福利视频| 国产精品久久久久久影院8一贰佰| 欧美日韩精品免费观看| 欧美日韩视频不卡| 国产精品99一区二区| 国产精品久久精品日日| 国产欧美日韩视频在线观看| 国产欧美日韩综合| 国产自产精品| 亚洲国产精品va在线看黑人| 亚洲精品免费在线观看| 亚洲最新合集| 亚洲欧美日韩精品| 久久久久九九九| 欧美a级一区| 亚洲精品久久久久久久久| 亚洲免费av观看| 亚洲欧美久久| 久久字幕精品一区| 欧美日韩不卡| 国产视频一区二区在线观看| 在线电影院国产精品| 亚洲精品一区久久久久久| 亚洲主播在线观看| 久久躁日日躁aaaaxxxx| 亚洲国产美女| 亚洲永久视频| 欧美ed2k| 国产精品一区二区三区四区五区| 国内欧美视频一区二区| 亚洲精品一区中文| 香蕉免费一区二区三区在线观看| 免费成人网www| aa级大片欧美| 久久久久国产精品厨房| 欧美日韩国产综合一区二区| 国产乱人伦精品一区二区| 亚洲电影免费在线观看| 亚洲欧美国产高清va在线播| 玖玖在线精品| 中文一区在线| 免费在线视频一区| 国产精品有限公司| 亚洲精品护士| 久久久久免费观看| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲三级免费| 久久精视频免费在线久久完整在线看 | 亚洲精品激情| 久久都是精品| 国产精品私房写真福利视频| 亚洲美女中出| 欧美成人一品| 久久精品99久久香蕉国产色戒| 国产精品乱码|