qt實戰之抓色器

2021-10-05 22:08:25 字數 1969 閱讀 5432

這段時間學習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....