這段時間學習qss,在選取顏色的時候比較麻煩,群友給我發了乙個抓色工具,我就想著自己也可以做乙個,廢話不多說,開始吧。
放到通過滑鼠的相關事件event能獲取到滑鼠的位置,但是沒有找到能直接獲取螢幕某一畫素點的顏色資訊相關的方法,所以打算先抓取螢幕截圖,然後對截圖進行制定畫素點操作就可以啦。
//抓取螢幕
qscreen * m_screen = windowhandle()->screen();
//獲取滑鼠pos
//注event.pos和event.windpos都是視窗(widget)的座標,這裡需要螢幕座標應該使用event.globalpos
int globalx = event->globalpos().x();
int globaly = event->globalpos().y();
//int posx = event->pos().x();
// int posy = event->pos().y();
注意:這裡是對整個螢幕進行的抓取顏色,所以需要獲取的是滑鼠再螢幕中的座標,應該使用globalpos(),千萬不能使用pos()或者windowpos()。
擷取螢幕為,並獲得滑鼠所在位置的畫素點顏色資訊
//從原點(螢幕左上角)為起點,擷取長(螢幕長)和寬(螢幕寬)的截圖
screen_width,screen_length);
if(!pix.isnull()){
qimage image = pix.toimage();
if(!image.isnull()){
//獲取滑鼠位置畫素點的顏色資訊
qcolor m_color = image.pixel(globalx,globaly);
int color_r = m_color.red();
int color_g = m_color.green();
int color_b = m_color.blue();
qdebug()<
即可實現抓取畫素點的顏色資訊,但是這種方式會出現螢幕閃現的問題,這是因為截圖的時候,每次都是擷取真個螢幕作為截圖。
其實只需要擷取滑鼠所在的點為乙個截圖,就能實現效果,如下:
if(!pix.isnull()){
qimage image = pix.toimage();
if(!image.isnull()){
//因為是擷取乙個點作為,所以滑鼠所在點的畫素點在這裡應該座標是(0,0)
qcolor m_color= image.pixel(0,0);
int color_r = m_color.red();
int color_g = m_color.green();
int color_b = m_color.blue();
qdebug()<
void mousepressevent(qmouseevent *event);
void mousereleaseevent(qmouseevent *event);
void mousemoveevent(qmouseevent *event);
在不同的事件中寫入相應的操作,取色核心**我放在了mousereleaseevent中
並沒有把整個細節全部放上來,感覺好麻煩呀。
流程:1.自定義個mybutton繼承qpushbutton,再這裡面重寫滑鼠的三個事件,並鍵再pressevent中進行自定義游標修改。
2.主介面繫結按鈕傳送來的訊號,並處理得到畫素點的顏色資訊,並進行各個元件的顯示
3.最後實現一下自動複製到剪貼簿、不能最大化等功能即可。
最後,設計一下自己的介面,emmm著實有點醜,先這麼的把,學完qss之後再回來修改下介面。網太慢,下次下了github再放**。
反色操作之c 實現(qt 不調包)
反色的實際含義是將r g b值反轉。如果顏色的範圍為0 255之間,則新圖的r g b值為255減去原圖的r g b值。其公式為 r new 255 r old g new 255 g old b new 255 b old 反色操作 qimage mainwindow inversecolor q...
Qt之定時器
qt中定時器的使用有兩種方法,一種是使用qobject類提供的定時器,還有一種就是使用qtimer類。定時器類qtimer提供當定時器觸發的時候發射乙個訊號的定時器,它提供只觸發一次的超時事件。1 啟動定時器 int m timerid starttimer 300 啟動乙個qtimer型別的定時器...
Qt之簡易計算器
寫之原因 本人是一名菜鳥,學了qt也就十天左右吧。學習一種對我來說比較新的語言,最好的學習方式就是去真刀真槍的幹一場!所以,閒來無事,就打算寫乙個小應用。思來想去,覺得還是寫乙個簡單的計算器吧,因為其他的涉及的還不是特別深,感覺自己能駕馭的就是計算器這種,簡單而實用的小應用。1 calculate....