美文网首页
Qt Jambi 4.8 快速入门

Qt Jambi 4.8 快速入门

作者: 蓝点工坊 | 来源:发表于2017-02-07 13:50 被阅读2282次

    因为一个项目几个库均是jar库,而本人对于Qt 很熟悉.因此采用Qt Jambi 进行开发

    这里用即用java 编写Qt 风格类库,而且还能用Qt Designer 进行非常对我胃口

    几个常用链接

    一.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运行如下命令行

    ./qtjambi.sh

    这是运行效果

    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界面.并且能动态切换不同主题.

    相关文章

      网友评论

          本文标题:Qt Jambi 4.8 快速入门

          本文链接:https://www.haomeiwen.com/subject/bbzyittx.html