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

逛奔的蝸牛

我不聰明,但我會(huì)很努力

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

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


最近做項(xiàng)目遇到的問題,總結(jié)下。

有時(shí)候我們覺得系統(tǒng)的標(biāo)題欄和按鈕太丑太呆板,想做自己的標(biāo)題欄以及最大化、最小化、關(guān)閉,菜單按鈕,我們就需要 

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

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

1.自己對(duì)mouseMoveEvent,mousePressEvent,mouseReleaseEvent 等事件進(jìn)行處理。

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


我剛開始使用第一種方法去實(shí)現(xiàn)的。移動(dòng)窗口很容易做,大家可以去看看這個(gè)大大寫的,比網(wǎng)上其他版本問題少些。

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

在窗口邊緣按下鼠標(biāo)拖動(dòng)改變窗口大小就比較麻煩了。

我是這樣做的:

在mousePressEvent 按下設(shè)置m_bPressed為真。

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

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

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


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

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

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

這里我們要重新實(shí)現(xiàn)winEvent ( MSG * message, long * result ) 

該虛函數(shù)在QWidget和QWizard以及QSizeGrip以及他們的子類中都可以實(shí)現(xiàn)。

如果你想停止Qt處理消息就返回true,并且設(shè)置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的消息響應(yīng)函數(shù)會(huì)根據(jù)鼠標(biāo)當(dāng)前的坐標(biāo)來判斷鼠標(biāo)命中了窗口的哪個(gè)部位,消息響應(yīng)函數(shù)的返回值指出了部位,例如它可能會(huì)返回HTCAPTION,或者HTCLIENT等。(其返回值有很多,請(qǐng)查閱MSDN)。

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

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

頭文件申明:

  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實(shí)現(xiàn)

  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肯定比我們自己實(shí)現(xiàn)的效果要好多了。

以上的18 以及 22 是我對(duì)程序的邊緣進(jìn)行判斷的范圍。

因?yàn)?/p>

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

  1. xPos > 18 && xPos < 22 其實(shí)就是我們假定的邊框了。  
  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 逛奔的蝸牛 閱讀(4205) 評(píng)論(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>
            亚洲天堂男人| 99精品视频免费观看| 久久精品视频在线免费观看| 夜夜爽www精品| 在线一区二区三区四区五区| 一区二区三区高清在线| 99精品国产热久久91蜜凸| 亚洲系列中文字幕| 香蕉视频成人在线观看| 久久精品av麻豆的观看方式| 米奇777超碰欧美日韩亚洲| 欧美激情久久久| 欧美性生交xxxxx久久久| 国产一本一道久久香蕉| 亚洲国产女人aaa毛片在线| 亚洲二区在线观看| 亚洲一区二区三区影院| 久久全国免费视频| 亚洲欧洲在线免费| 最近中文字幕mv在线一区二区三区四区| 亚洲精品乱码久久久久久日本蜜臀 | 国产精品视频最多的网站| 国产日韩欧美精品一区| 亚洲国产精品一区制服丝袜| 亚洲免费观看| 久久高清国产| 亚洲欧洲视频| 久久久久久久综合日本| 欧美日韩四区| 在线观看国产成人av片| 亚洲专区一区二区三区| 欧美成人一区二区| 午夜精品久久久| 欧美日韩成人在线播放| 国产亚洲一级高清| 亚洲一区精彩视频| 亚洲国产综合91精品麻豆| 欧美一级网站| 国产精品理论片| 99精品欧美| 亚洲电影一级黄| 久久精品一区| 国产欧美一区二区三区沐欲| 在线性视频日韩欧美| 美女露胸一区二区三区| 亚洲欧美视频在线观看| 国产精品vvv| 在线亚洲国产精品网站| 亚洲国产成人久久| 欧美一级午夜免费电影| 欧美日韩国产电影| 尤物精品在线| 久久激情综合网| 亚洲视频在线看| 欧美日韩国产123| 日韩视频永久免费| 亚洲第一伊人| 麻豆freexxxx性91精品| 一区二区在线观看视频| 久久久噜噜噜久噜久久| 小处雏高清一区二区三区| 国产精品永久免费视频| 欧美一区二区在线免费播放| 亚洲一区网站| 国产欧美亚洲一区| 欧美一级在线视频| 欧美一区二区三区四区在线观看地址 | 性欧美xxxx大乳国产app| 一本久道综合久久精品| 欧美视频网站| 午夜精品久久久久久久蜜桃app| 一本不卡影院| 国产精品视频一二三| 欧美一级久久久| 亚洲欧美在线一区二区| 国产午夜精品在线观看| 麻豆精品在线视频| 欧美国产专区| 亚洲欧美在线播放| 久久av一区二区三区漫画| 在线观看日韩欧美| 亚洲福利在线看| 欧美日韩国产黄| 欧美一区二区三区日韩视频| 欧美在线视频免费观看| 亚洲黄色一区| 一区二区日韩欧美| 韩国精品在线观看| 亚洲麻豆一区| 国产一区二区三区不卡在线观看 | 亚洲视频一二区| 国产偷自视频区视频一区二区| 久久亚洲精品伦理| 欧美老女人xx| 久久久精品免费视频| 美女精品国产| 亚洲午夜视频在线| 久久国产精品久久久| 亚洲精品国产品国语在线app| 亚洲精品一区二区三区樱花| 国产精品一区二区三区乱码| 欧美α欧美αv大片| 国产精品xxxxx| 亚洲成人在线视频网站| 国产精品一区在线播放| 女仆av观看一区| 午夜精品一区二区三区电影天堂| 中文av一区特黄| 一区二区三区在线免费观看 | 欧美一区二区三区婷婷月色| 亚洲精品免费在线| 香蕉久久夜色精品国产使用方法| 日韩一区二区高清| 久久精品国产99| 午夜精品偷拍| 欧美午夜不卡视频| 亚洲国产小视频在线观看| 合欧美一区二区三区| 9人人澡人人爽人人精品| 亚洲第一伊人| 午夜亚洲福利在线老司机| 99精品欧美一区二区三区| 久久国内精品自在自线400部| 亚洲免费网址| 欧美色123| 亚洲人成网站影音先锋播放| 好吊一区二区三区| 欧美一区2区三区4区公司二百| 亚洲一区二区视频| 欧美激情视频在线播放| 欧美激情二区三区| 亚洲电影免费观看高清完整版在线观看| 亚洲一区在线视频| 亚洲午夜久久久久久尤物| 欧美美女操人视频| 亚洲欧洲精品一区二区三区 | 国产精品嫩草影院av蜜臀| 亚洲免费久久| 中文久久精品| 欧美日韩国产综合视频在线观看中文 | 国产日韩精品在线播放| 在线午夜精品自拍| 亚洲淫片在线视频| 国产精品久久久久一区二区三区| 夜夜爽99久久国产综合精品女不卡| 一本一道久久综合狠狠老精东影业| 美日韩精品视频| 亚洲精品国产品国语在线app| 一本大道久久a久久综合婷婷| 欧美日韩另类在线| 亚洲天堂免费观看| 久久久水蜜桃| 亚洲欧洲精品一区二区精品久久久| 嫩草影视亚洲| 99国产精品久久久久久久| 亚洲小视频在线| 国产人妖伪娘一区91| 久久精品综合网| 亚洲国产一区二区精品专区| av成人激情| 国产精品欧美经典| 久久久久久久综合日本| 国产欧美日韩| 免费在线日韩av| 欧美高清视频在线| 99在线热播精品免费99热| 欧美午夜宅男影院| 欧美一区成人| 亚洲人成7777| 久久精品国产亚洲aⅴ| 亚洲激情啪啪| 国产精品资源在线观看| 美女精品网站| 亚洲欧美中文字幕| 欧美顶级少妇做爰| 亚洲欧美一区二区原创| 尤物yw午夜国产精品视频明星| 欧美日韩国产成人高清视频| 欧美在线视频观看免费网站| 亚洲欧洲一区二区天堂久久| 久久久久久亚洲精品不卡4k岛国| 亚洲精品视频在线播放| 国产日本欧美视频| 欧美激情一区二区三区在线视频| 亚洲免费中文| 亚洲免费观看高清完整版在线观看| 久久精品欧洲| 亚洲一二三区精品| 亚洲黄页视频免费观看| 国产欧美短视频| 欧美日韩在线看| 欧美成人国产| 久久久av毛片精品| 亚洲一区二区av电影| 亚洲精品一区二区三区不| 蜜桃视频一区| 久久精品人人| 久久精品国产77777蜜臀| 亚洲一区黄色| 亚洲一区二区精品在线|