一周Qt使用小結

2021-08-25 18:39:56 字數 1663 閱讀 7350

初創公司,沒有像大公司那樣的技術積累,很多東西需要自己從頭幹起,其中較大的一塊就是工具。想起剛剛參加工作半年的那會兒,老闆為了說服我寫工具,說讓我進工具組是培養我,寫了乙個資料校驗工具後,我就死活再也不肯開發工具了,硬要繼續寫服務端程式。現在真是輪迴,這次我是發現,我們實在是太需要工具了,於是決定自己寫工具來提高公司的遊戲開發效率。

於是,首先用本週時間,開發了乙個用於編輯遊戲layout的工具,使用的ui庫是qt。這個雖然是在公司有在macos下使用工具的需求下做出的選擇,但是還是不得不說,對比3年前學習和使用mfc的經歷,總體來說是心情愉快了很多。

qt的學習斷斷續續,雖然我的部落格中有個qt的分類,但是在之前其實了解的還是比較淺的,除了大概翻看過《c++ gui qt 4程式設計》(第二版)一書,用qt結合opengl做了一些小的動畫demo,基本沒有開發過啥實際的東西。說起來這還是第一次在工作中使用到qt,中間多少還是走了一些彎路,也碰到過一些問題,這裡大概總結一下,想到哪就說到哪了。

使用qt的時候,還走了一些彎路,一部分也算是自己了解qt不深入,一部分應該也算是qt的設計問題。

model的自定義使用:

insertrows,removerows需要自己實現,大部分時候僅僅需要:

begininsertrows(parent, row + 1, row + count);

endinsertrows();

return true;

和beginremoverows(parent, row , row + count - 1);

endremoverows();

return true;

但是還是需要自己實現,不然的話實現是空的,那麼是沒有刪除和新增效果的。相當不理解,那rowcount是幹啥用的?其實應該只需要update/refresh一下就好了。或者,emit一下qt中已經有的rowsinserted或者rowsremoved signal也就好了,但是在rowsinserted,rowsremoved訊號的文件中明確的表示這兩個訊息不允許子類呼叫的,「it can only be emitted by theqabstractitemmodelimplementation, and cannot be explicitly emitted in subclass code.」

而insertrow和removerow是呼叫insertrows和removerows來實現的,(文件如此描述)所以我們不需要實現了。不知道哪種邏輯更為正確,插入多行是多次插入呢,(所以插入多行可以通過多次呼叫插入一行實現)還是插入一行是插入多行的特殊情況呢?(就如同qt這樣反過來實現)

beginmoverows和endmoverows系列就更有意思了,因為沒有moverows用於過載..............那麼,這些protected的函式什麼時候呼叫呢?

最後找到了layoutchanged訊號,發現只需要在改動後emit此訊號即可重新整理。並且insert和remove都可以實現。原來........qt設計者眼中的update/refresh名字叫做layoutchanged.........相當暈。

使用qaction作為快捷鍵的時候,在乙個列表空間中建立,發現無論如何都無法出發triggered訊號,最後只能在全應用程式的選單中新增action了事........這個比較困惑,也就是說沒有區域性快捷鍵?

對qt的了解有限,使用一周,為了防止同乙個坑掉進去兩次,特寫下一些東西作為回頭查閱的資料,覺得不對的請提出來。

一周Qt使用小結

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!初創公司,沒有像大公司那樣的技術積累,很多東西需要自己從頭幹起,其中較大的一塊就是工具。想起剛剛參加工作半年的那會兒,老闆為了說服我寫工具,說讓我進工具組是培養我,寫了乙個資料校驗工具後,我就死活再也不肯開發工具了,硬要繼續寫服務端程式。現在真是輪...

一周工作小結

一連幾天都比較忙,前天和老許一起去了學校,看了看羅捷小組的專案,然後我們就在邊上偷笑,發現和我們還是有段距離的,hoho。中午在重慶雞功煲吃的,我的本意是要請羅捷吃頓的,他畢竟幫了我們滿大的乙個忙,可是怎麼拉他都不去,那也只好算了,下午又和泡泡,老許去游泳。這個泡泡真是差點氣 死我。交給我的詳細設計...

3 21一周小結

這周依舊是做貪心的題目,不過這周題目做起來要比之前舒服很多,當時在做ride to office時,剛開始看以為是追趕問題,想著就會很麻煩,但是,在經過一段時間掙扎後,我看了看別人寫的題解,才豁然頓悟,貪心的應用如同它本意一樣,要找到最優解,而不是侷限在自己那一點思維當中,要會去深入思考。再後來的做...