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

逛奔的蝸牛

我不聰明,但我會很努力

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

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://m.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>
            亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲欧洲日产国产综合网| 羞羞视频在线观看欧美| 欧美日韩一视频区二区| 亚洲一级片在线观看| 亚洲视频在线视频| 国产精品视频免费一区| 久久精品国产综合精品| 欧美一区二区三区在线播放| 国产欧美日韩在线视频| 久久久久国产精品一区| 久久精品视频在线播放| 亚洲日本va在线观看| 日韩视频三区| 国产午夜精品理论片a级大结局| 久久激情视频免费观看| 久久久青草婷婷精品综合日韩| 亚洲欧洲日韩综合二区| 一区二区三区四区在线| 国产日韩在线一区| 欧美成人午夜| 欧美视频中文一区二区三区在线观看| 欧美一区二区免费| 麻豆freexxxx性91精品| 亚洲社区在线观看| 久久成人免费| 一本色道久久加勒比精品| 性久久久久久| 亚洲美女视频网| 欧美在线观看视频| 日韩视频免费在线| 久久精品123| 亚洲一区二区三区成人在线视频精品| 久久成人精品一区二区三区| 亚洲免费观看在线观看| 欧美一区二区精品| 99re热精品| 性久久久久久久| 一区二区三区黄色| 美女在线一区二区| 久久精品男女| 国产精品播放| 亚洲韩国精品一区| 在线成人免费观看| 午夜宅男欧美| 亚洲一区二区三区乱码aⅴ| 美女网站久久| 久久综合九色| 国产欧美视频一区二区三区| 亚洲欧洲精品成人久久奇米网| 韩国av一区二区三区在线观看| 夜夜嗨av一区二区三区四季av| 亚洲国产一二三| 久久精品国产69国产精品亚洲 | 亚洲国产精品一区二区www在线| 日韩一级免费观看| 亚洲国产日韩综合一区| 久久国产综合精品| 欧美主播一区二区三区| 欧美日韩亚洲另类| 亚洲伦理在线免费看| 亚洲精品日本| 欧美aa国产视频| 欧美国产激情二区三区| 在线观看欧美黄色| 久久精品一区二区三区四区| 久久国内精品自在自线400部| 国产精品久久久99| 亚洲视频大全| 午夜精品久久久久久久99樱桃| 欧美日韩视频在线一区二区 | 亚洲国产裸拍裸体视频在线观看乱了| 好男人免费精品视频| 久久精品亚洲精品| 久久久久国产精品午夜一区| 国产专区综合网| 久久久久国产精品人| 久久综合久色欧美综合狠狠| 狠狠做深爱婷婷久久综合一区| 久久精品国内一区二区三区| 美国成人直播| 亚洲区中文字幕| 欧美三级中文字幕在线观看| 亚洲天堂视频在线观看| 久久久精品日韩欧美| 在线观看欧美日本| 欧美韩国一区| 亚洲午夜羞羞片| 久久美女艺术照精彩视频福利播放| 国产亚洲欧美一区二区三区| 看欧美日韩国产| 亚洲经典在线| 午夜精品久久久久久久白皮肤| 国产视频自拍一区| 欧美成在线观看| 亚洲在线免费| 欧美激情成人在线视频| 亚洲天堂成人| 狠狠噜噜久久| 欧美视频在线一区| 久久久久.com| 夜夜嗨av一区二区三区中文字幕| 久久国产精品72免费观看| 91久久久久久| 国产精品男gay被猛男狂揉视频| 久久久www| 在线视频精品| 欧美福利在线| 欧美一区二区视频97| 最新国产の精品合集bt伙计| 国产精品久久久久久久免费软件| 久久久久国产精品一区三寸| 日韩小视频在线观看专区| 久久人人看视频| 一区二区三区四区五区在线 | 欧美日韩免费一区二区三区视频| 欧美在线免费一级片| 亚洲精品日日夜夜| 久久综合狠狠| 亚洲免费在线观看| 亚洲精品在线二区| 激情六月婷婷综合| 国产精品日韩一区二区三区| 欧美精品久久99| 免播放器亚洲| 久久久精彩视频| 欧美一级黄色录像| 亚洲一区二区成人| 一区二区免费在线播放| 亚洲激情欧美| 欧美成人精品福利| 久久久最新网址| 久久精品女人| 欧美在线观看视频一区二区三区| 亚洲天堂av在线免费| 日韩天堂在线视频| 亚洲美女视频在线观看| 亚洲国产成人精品久久| 一区二区三区在线高清| 国产亚洲成精品久久| 国产精品私房写真福利视频| 欧美深夜福利| 欧美日韩精品二区第二页| 欧美电影在线观看完整版| 老司机免费视频一区二区三区 | 日韩图片一区| 亚洲日本欧美日韩高观看| 亚洲欧洲精品一区二区三区波多野1战4 | 99视频一区二区| 日韩一级视频免费观看在线| 亚洲国产婷婷| 9i看片成人免费高清| 亚洲精品一区二区三区av| 亚洲精选久久| 亚洲午夜精品久久久久久浪潮 | 亚洲视屏在线播放| 亚洲综合精品自拍| 欧美一区二区大片| 久久精品一本| 另类av一区二区| 亚洲国产精品成人综合| 亚洲精品乱码久久久久| 亚洲精品美女在线| 亚洲视频在线播放| 欧美一区二区三区免费大片| 欧美一区视频| 蘑菇福利视频一区播放| 欧美日韩午夜精品| 国产视频观看一区| 亚洲成人影音| 日韩天天综合| 欧美专区一区二区三区| 欧美xx69| 亚洲手机成人高清视频| 久久精品视频在线播放| 欧美精选一区| 国产麻豆视频精品| 亚洲欧洲免费视频| 销魂美女一区二区三区视频在线| 久久夜色精品一区| 99精品国产在热久久婷婷| 翔田千里一区二区| 欧美韩日一区| 国产综合色在线| 一本色道久久综合亚洲精品婷婷 | 亚洲午夜精品久久| 免费短视频成人日韩| 亚洲视频一区二区在线观看 | 久久精品免费播放| 欧美色网一区二区| 亚洲高清在线| 亚洲欧美在线网| 亚洲国产精品va在线观看黑人| 亚洲一区二区在线免费观看视频| 久久久亚洲一区| 国产精品一卡| 一区二区三区国产在线| 蜜臀99久久精品久久久久久软件| 中国成人黄色视屏| 欧美日韩ab|