由於一個項目幾個庫均是jar庫,而本人對於Qt 很熟悉.所以採用Qt Jambi 進行開發html
這裏用即用java 編寫Qt 風格類庫,並且還能用Qt Designer 進行很是對我胃口java
幾個經常使用連接macos
官方下載地址 http://qtjambi.org/downloadsvim
歷史版本,包括 Eclipse 插件的鏡像網站
ftp://ftp.informatik.hu-berlin.de/pub3/Linux/Qt/QT/qtjambi/source/bash
Qt 的Jambi Wiki頁,包含大量教程
https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/qtjambi-index.html工具
入門小教程 https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/qtjambi-tutorial1.html測試
這一模式,須要安裝JDK及QtJambi 便可.
首先安裝JDK ,具體可看相關資料
下載最新版的Qt Jambi
http://sourceforge.net/projects/qtjambi/files/4.8.6/qtjambi-macosx-community-4.8.6.tar.gz/download網站
下載後解壓:
能夠直接運行相關demo運行以下命令行ui
./qtjambi.shthis
這是運行效果
Paste_Image.png
安裝用以下命令行,它會將一系列動態庫dylib拷入系統目錄中
sudo sh installer-osx.sh
這是一個官方的Hello World改寫
import com.trolltech.qt.gui.*; public class HelloWorld { public static void main(String args[]) { QApplication.initialize(args); QPushButton hello = new QPushButton("Hello World!"); hello.resize(120, 40); hello.setWindowTitle("Hello World"); hello.show(); QApplication.execStatic(); //<--注意這裏的寫法 QApplication.shutdown(); } }
在Jambi 4.5.2 版中,使用跟Qt C++版相同寫法QApplication.exec();
https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/qtjambi-tutorial1-code.html
但這裏在新的JDK下沒法編譯 會提示
HelloWorld.java:66: 錯誤: 沒法從靜態上下文中引用非靜態 方法 exec()
QApplication.exec();
設置環境變量CLASSPATH,讓javac找到jambi庫,在~/.bash_profile加入以下三句,註銷重登陸生效
export JAVA_HOME=`/usr/libexec/java_home` export JAMBI_LIBRARY_PATH=/Users/pro/Documents/other-workspace/qtjambi-4.8.6 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:${JAMBI_LIBRARY_PATH}/qtjambi-native-macosx-gcc-4.8.6.jar:${JAMBI_LIBRARY_PATH}/qtjambi-4.8.6.jar:${JAMBI_LIBRARY_PATH}/qtjambi-util.jar:${JAMBI_LIBRARY_PATH}/qtjambi-designer-4.8.6.jar
調用以下語句便可,成功後生成HelloWorld.class
javac HelloWorld.java
這裏運行用java便可
java -XstartOnFirstThread HelloWorld
若是找到不jambi庫,能夠用-classpath 參數指明jambi庫的路徑強制指定路徑
export JAMBI_LIBRARY_PATH=/Users/pro/Documents/other-workspace/qtjambi-4.8.6 export CP=${JAMBI_LIBRARY_PATH}/qtjambi-4.8.6.jar:${JAMBI_LIBRARY_PATH}/qtjambi-util.jar:${JAMBI_LIBRARY_PATH}/qtjambi-designer-4.8.6.jar java -XstartOnFirstThread -classpath $CLASSPATH:$CP HelloWorld
運行效果圖
用Qt最大優勢是能夠用QtDesigner 來進行可視化設計,這樣大大加快程序開發速度,Jambi也保留這個優勢.若是對QtDesigner 比較熟練,這個上手很快.
注意不要直接使用QtSDK中QtDesigner ,它生成設計文件.ui 須要轉換並用JNI才能使用.
這個能夠直接在命令行下執行 Jambi 目錄下./designer.sh,便可顯示,它生成是 .jui這樣專用文件
Jambi Designer 的界面
QtDesigner 界面
具體的操做方法能夠另行找教程
.jui 的文件須要用命令行工具JUIC 來轉換成相應java代碼,(這個工具相似於QtSDK 的uic
能夠用先把創建一個系統調用腳本
sudo vim /usr/local/bin/juic
JAMBIDIR=/Library/QtJambi-4.8.6 if [ ! -d "$JAMBIDIR" ]; then echo "Qt Jambi libs don't seem to be installed. Will attempt to install them:\nsudo sh installer-osx.sh" # sudo sh installer-osx.sh fi JAMBIHOME=/Users/pro/Documents/other-workspace/qtjambi-4.8.6 DYLD_LIBRARY_PATH=$JAMBIDIR/lib $JAMBIHOME/bin/juic $@
直接執行生成語句,-pf是指定前綴hello,這樣生成 prefx+dialog.java的名稱,不然固定爲UI_dialog.java
pro$ juic helloDialog.jui -pfUi_hello
updated: Ui_helloDialog
最終生成的java 類有以下命令規則, 前綴+頂層對象名.java
缺省的前綴是 Ui_,
生成 Ui_helloDialog.java
/******************************************************************************** ** Form generated from reading ui file 'helloDialog.jui' ** ** Created by: Qt User Interface Compiler version 4.8.6 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************************/ import com.trolltech.qt.core.*; import com.trolltech.qt.gui.*; public class Ui_helloDialog implements com.trolltech.qt.QUiForm<QDialog> { public QDialogButtonBox buttonBox; public QListWidget listWidget; public Ui_helloDialog() { super(); } public void setupUi(QDialog Dialog) { Dialog.setObjectName("Dialog"); Dialog.resize(new QSize(400, 300).expandedTo(Dialog.minimumSizeHint())); buttonBox = new QDialogButtonBox(Dialog); buttonBox.setObjectName("buttonBox"); buttonBox.setGeometry(new QRect(30, 240, 341, 32)); buttonBox.setOrientation(com.trolltech.qt.core.Qt.Orientation.Horizontal); buttonBox.setStandardButtons(com.trolltech.qt.gui.QDialogButtonBox.StandardButton.createQFlags(com.trolltech.qt.gui.QDialogButtonBox.StandardButton.Cancel,com.trolltech.qt.gui.QDialogButtonBox.StandardButton.Ok)); listWidget = new QListWidget(Dialog); listWidget.setObjectName("listWidget"); listWidget.setGeometry(new QRect(0, 0, 401, 221)); retranslateUi(Dialog); buttonBox.accepted.connect(Dialog, "accept()"); buttonBox.rejected.connect(Dialog, "reject()"); Dialog.connectSlotsByName(); } // setupUi void retranslateUi(QDialog Dialog) { Dialog.setWindowTitle(com.trolltech.qt.core.QCoreApplication.translate("Dialog", "Dialog", null)); } // retranslateUi }
寫一個主程序Main.java來調用這個類
import com.trolltech.qt.gui.*; public class Main { public static void main(String args[]) { QApplication.initialize(args); //這種寫法是抄例子的 QDialog d = new QDialog(); Ui_helloDialog ui = new Ui_helloDialog(); ui.setupUi(d); d.exec(); QApplication.execStatic(); QApplication.shutdown(); } }
編譯
javac Ui_helloDialog.java Main.java
運行
java -XstartOnFirstThread Main
最終效界,可見跟設計如出一轍
最終運行效果
Qt另外一大優勢就是能夠採用Qt Style Sheet 來定製全部控件外觀,這樣很容易開發出比較華麗UI界面.而且能動態切換不一樣主題.
做者:藍點工坊 連接:https://www.jianshu.com/p/6d7f8a560169 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。