在 Qt Designer 內使用自定義的 widget Part2

這篇是之前《在 Qt Designer 內使用自定義的 widget》一文的後續。

其實本來 Heresy 一直以為之前使用 QDesignerCustomWidgetInterface 另外封包一個 plugin 物件出來後就搞定了,但是後來才發現,真正要拿來建立函式庫,還是有點問題。

原因就是:如果在一個專案裡面、按照之前的方法寫多個 plugin 出來的話,在建置的連結階段,會出現重複定義的問題。Visual Studio 得到的錯誤會向下面這樣:

錯誤    LNK2005    qt_plugin_instance 已在 moc_plugin2.obj 中定義過了
QtUIforDesigner    moc_Plugin1.obj    1
錯誤    LNK2005    qt_plugin_query_metadata 已在 moc_Plugin2.obj 中定義過了
QtUIforDesigner    moc_Plugin1.obj    1

閱讀更多»

在 Qt Designer 內使用自定義的 widget

Qt 基本上是一個很有彈性的跨平台圖形介面框架,他本身就提供了很多 widget 可以使用。而除了可以透過程式碼來設計界面外,也可以使用官方提供的 Qt Designer(Qt 設計師、官網),用所見即所得的方法來拉出自己的介面,算是相當地方便。

如果官方提供的 widget 不夠用的話,也可以自己組合既有的元件、或是重頭撰寫一個符合自己的元件來用;這部分有需要話,可以參考官方的《Analog Clock Example》。

而如果想在 Designer 裡面使用自己定義的 widget 的話,就稍微麻煩一點了。這篇就是稍微整理一下,要怎麼在 Qt Designer 裡面、使用自己定義的 widget。

閱讀更多»

Qt Visual Studio Tools 的新版設定

很久之前,Heresy 曾經寫過一篇《不使用 qmake 建置 Qt Designer 產生的程式:手動建置》,記錄了當時還在 Qt4 時代的、Qt 的 moc 等前置流程的處理方式。

當時 Heresy 是決定自己寫一個 Visual Studio 的 Custom build rule 來解決 Visual Studio 下建置的流程,後來也算是完成了一個可以用的版本;所以其實相關的專案,後來也都是透過這個方法來建置了。

不過後來發現,這個自製的方案雖然算是可以正常運作,但是其實使用上還是有一些小問題;所以在切換到 Qt5 之後,Heresy 這邊的新專案都是改用 Qt 官方提供的 Qt Visual Studio Tools(連結官方文件)來建立 Qt 的專案。

而前一陣子,Heresy 一來是想把部分還在使用 Qt4 + 自行建置的 build rule 的專案一口氣升級到 Qt6,所以花了好些時間來測試、研究。這邊算是稍微記錄一下這次升級的時候,研究的一些相關的東西。

閱讀更多»

使用 Visual Studio 建置 Qt 6

由於 Heresy 這邊是用 Qt(官網)作為圖形介面程式開發的環境,所以在很久之前,Heresy 曾經記錄過自己建置 Qt 4.6.3 的經驗;不過後來,由於決定放棄自己建置、而是改用 Qt 官方提供的 Qt SDK,所以就沒研究怎麼自行建置了。

但是相對地,當引進 GitLab CI/CD 後,就變成得研究怎麼在 Windows Docker 裡面安裝 Qt SDK 了。

開始玩這部分後,才發現 Qt 在這部份真的很討厭…本來以為弄好第一次後,以後就沒什麼問題了,但是後來 Qt 一直修改他的安裝程式,導致常常過一段時間要重建 Docker image 的時候,安裝 Qt SDK 的腳本就廢掉、要修改(2020/02)…

閱讀更多»

Visual Studio + Qt SDK 的 Dockerfile

這篇是延續《Windows 的 Qt SDK Dockerfile [202002]》,來記錄一下到底要怎樣建置出一個可以拿來建置 Visual Studio + Qt VS Tools 專案的 Docker 容器。

Visual Studio 的 Docker 處理方法,基本上是延續之前《Visual C++ 2017 的 Docker 建置環境》、只做版本的更新。

以要安裝 Visual Studio 2019 Build Tools 的話,主要就是要在: Dockerfile 中加入:

閱讀更多»

Windows 的 Qt SDK Dockerfile [202002]

Heresy 從去年年初開始玩 Gitlab CI/CD 一段時間後,就開始試著把建置環境移動到 Docker(官網)上。在 Linux 上的問題不算大,但是在 Windows 上卻常常碰到一些問題(參考一參考二);前一陣子,甚至因為微軟自己的安全性更新,搞到整個不能用(參考)…

雖然說零零星星有些問題,但是大致上都還是可以使用的;在可以正常運作的情況下,感覺也算是相當地方便~

不過,對 Heresy 來說,這部分還有一個很大的問題,就是 Qt SDK(官網)。

閱讀更多»

Qt 安裝腳本更新

之前有寫了一篇《在 Windows 命令提示字元安裝 Qt SDK》,大概紀錄了一下,在沒有圖形介面的環境下,使用腳本來安裝 Qt SDK 的方法。

腳本在當時是沒問題的,但是沒想到前幾天要用的時候,卻發現又無法使用了…

網路上找了一下資料,發現似乎是在過沒幾天、Qt 把安裝程式更新到 3.1.x 後,又改了一些東西造成的。(拜託顧一下相容性啊…)

找到的資料是 StackOverflow 上的《Bypassing “User Data Collection" screen》這個回應。根據他的說法,這次改版主要是加入了「User Data Collection」的畫面,另外在選擇元件的部分也多了分類的選擇。

也因此,腳本要針對這兩個變化,做出修改:

閱讀更多»

在 Windows 命令提示字元安裝 Qt SDK

這篇算是《GitLab CI + Windows Docker 的一些紀錄》的延伸。由於 Heresy 這邊的開發專案有用到 Qt SDK(官網),所以在建置用的 Docker 容器裡面,也需要安裝 Qt 的 SDK。

但是由於 Qt 現在的線上安裝程式也都是以圖形介面為主,並在圖形介面中選擇要安裝那些套件;所以要怎麼在沒有圖形介面的 Docker 內安裝,就需要稍微研究一下了。

在找了一些資料後,可以知道 Qt 的安裝程式框架(Qt Installer Framework、QTIFW、官方文件)是有支援使用腳本(script)來做控制的!(官方文件

而在網路上,也可以找到使用這樣的機制,來自動安裝  Qt 的腳本範例。Heresy 這邊是參考《How can I install Qt 5.2.1 from the command line in Cygwin?》的例子。

閱讀更多»

在 QTableView 內使用 QItemDelegate 來畫按鈕

QTableView 是 Qt 的一個 model / view 的表格元件(官方文件),如果搭配 QAbstractItemModel 來使用的話,其實還算簡單好用,甚至可以很簡單地做到多個表格間的資料同步。

而如果需要表格內不只想要顯示文字、而希望可以使用一般的 QWidget 的話呢,他其實也有提供 setIndexWidget() 這個函式(文件),可以針對每一個欄位,來設定要使用的 widget。

或者另一個選擇,就是放棄使用 QAbstractItemModel,改用 QTableWidget參考),也是一個方法。

閱讀更多»