Qt Jambi 4.8 快速入門

由於一個項目幾個庫均是jar庫,而本人對於Qt 很熟悉.所以採用Qt Jambi 進行開發html

這裏用即用java 編寫Qt 風格類庫,並且還能用Qt Designer 進行很是對我胃口java

幾個經常使用連接macos

一.Mac OSX下命令行開發

1.1 安裝測試

這一模式,須要安裝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

1.2 編寫HelloWorld.java

這是一個官方的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();

1.3 編譯程序

設置環境變量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

1.4 運行程序

這裏運行用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

運行效果圖

二.使用QtDesigner 繪製界面

用Qt最大優勢是能夠用QtDesigner 來進行可視化設計,這樣大大加快程序開發速度,Jambi也保留這個優勢.若是對QtDesigner 比較熟練,這個上手很快.

注意不要直接使用QtSDK中QtDesigner ,它生成設計文件.ui 須要轉換並用JNI才能使用.

2.1 設計界面

這個能夠直接在命令行下執行 Jambi 目錄下./designer.sh,便可顯示,它生成是 .jui這樣專用文件

Jambi Designer 的界面

 

QtDesigner 界面

具體的操做方法能夠另行找教程

3.1 生成代碼

.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_,

3.3 生成最終代碼

生成 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

}

3.4 測試生成效果

寫一個主程序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

最終效界,可見跟設計如出一轍

最終運行效果

三.使用QSS定製界面

Qt另外一大優勢就是能夠採用Qt Style Sheet 來定製全部控件外觀,這樣很容易開發出比較華麗UI界面.而且能動態切換不一樣主題.

做者:藍點工坊 連接:https://www.jianshu.com/p/6d7f8a560169 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索