星期三, 十二月 02, 2015

pyqt 5定制数据模型/Custom data model

目的:qml中combobox的Model用python实现 Model,并通过QML显示出来
要点:qt 5已经改变了roleNames方法,字符串需要用原始ascll 码,字符串前面加b来实现改点;
数据项目必须扩展来自pyqt 5的object.

ListModel.py
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import QAbstractListModel, QModelIndex, Qt, QUrl, QVariant
                   
class LottoListModel(QtCore.QAbstractListModel):
    titleRole = Qt.UserRole + 1
    def __init__(self, parent=None):
        super(LottoListModel, self).__init__(parent)

        self.items = []
    def roleNames(self):
        names = {}
        names[self.titleRole] = b"title"
       # names[self.colorRole] = "color"
        return names
         
    def appendRow(self, item):
        self.items.append(item)

    def rowCount(self, parent=QtCore.QModelIndex()):
        print('rowcount.....')
        return len(self.items)

    def data(self, index, role=Qt.DisplayRole):
        print('get data....',index,'   ',role)
        try:
            item = self.items[index.row()]
        except IndexError:
            return QVariant()

        if role == self.titleRole:
            return item.title()


        return QVariant()         

class LottoListItem(object):#核心关键,必须是python object的子类作为项目
    def __init__(self, title):
        self._title = title


    def title(self):
        return self._title

main.py:
import sys
import os
from PyQt5.QtCore import QObject, QUrl, pyqtSlot, QVariant
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, QUrl, Qt,QAbstractTableModel
from PyQt5.QtCore import  pyqtProperty,pyqtSignal
import PyQt5
import ListModel as LM
class MainApp(QObject):
     @pyqtSlot(result=QVariant)
     def getAlgorithm(self):
          self.myModel=LM.LottoListModel()
          self.myModel.appendRow(LM.LottoListItem("0001"))    
          self.myModel.appendRow(LM.LottoListItem("0002"))         
          return self.myModel;

app = QGuiApplication (sys.argv)
engine=QQmlApplicationEngine()
ctx = engine.rootContext()

engine.load(QUrl("view.qml "))
window = engine.rootObjects()[0]
_MainApp = MainApp(window)
_MainApp.logwin[str].connect(window.logger)
_MainApp.getAlgorithm();
ctx.setContextProperty("py_MainApp", _MainApp)

window.show()
sys.exit(app.exec_())

         
view.qml

import QtQuick 2.5
import QtQuick.Controls 1.4
Rectangle {
   id: myItem

     color:'red'
   width: 500; height: 500


ComboBox {
    model:py_MainApp.getAlgorithm()
    width: 200
     }
ListView {
    width: 200; height: 250

    model: myModel
    delegate: Text {title }
     }
}

星期六, 十一月 07, 2015

pyqt5 可以把Python和QT5都可以关联起来。

今天把QT5下的一个QML程序简单移植到python下,通过pyqt5,果然非常的强大。
pyqt5非常强大

星期三, 五月 27, 2015

ofbiz 用于netbeans/Eclipse 定制。

1.NetBean 8.0.2/jdk .1.8/ofbiz 13.07.02
关键一点:新建项目使用Netbeans的 Java /Java Free-Form Project,Java自由格式项目
到Ofbiz展开的目录即可。非常简单。
编译是只需要找到build.xml选择里面的各种人物,运行执行即可。

2.Eclipse4.4/jdk 1.8/ofbiz 13.07.02

https://cwiki.apache.org/confluence/display/OFBIZ/Eclipse+Tips
 
 现在的ofbiz .zip包里就应该包含了Eclipse .project文件,所以打开Ofbiz是更加容易的。
不过需要注意的是Eclipse的work space不能直接在ofbiz的展开目录上比如:
D:\apache-ofbiz-13.07.02 上打开;
打开ofbiz在Eclipse只要选择Import然后选择"Existing Project into Workspace",然后
在目录里输入:D:\apache-ofbiz-13.07.02,选择结束即可。
调试什么的参考:
https://cwiki.apache.org/confluence/display/OFBIZ/Running+and+Debugging+OFBiz+in+Eclipse

星期二, 五月 26, 2015

成功在jdk.1.8.0_45 x64/MariaDB 10.0.19_x64/安装成功ofbiz-13.07.02

ofbiz-13.07.01,有个问题,在jdk 1.8的时候,安装完demo.ant load-demo后
浏览http://127.0.0.0:8080/ecommerce的时候,页面语言菜单无法显示,出现异常。
只能降级到 jdk 1.7使用。
这个新的版本  13.07.02 这个bug修复了。并且成功在MariaDB上也就是Mysql 5.6上
安装成功!!!!!!!

漂亮。

星期五, 五月 08, 2015

QT 5.4 天龙八部 中高级提高

1The Meta-Object System
 QT核心基础概念
http://doc.qt.io/qt-5/metaobjects.html#meta-object-system
2Models and Views in Qt Quick
综合应用预览篇。
http://doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html
3Model/View Programming
QT 核心综合概念
http://doc.qt.io/qt-5/model-view-programming.html
4Using C++ Models with Qt Quick Views
综合快速引用QML/C++ 
http://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html
5Writing QML Extensions with C++
 理解深入隐藏在后面的概念
http://doc.qt.io/qt-5/qtqml-tutorials-extending-qml-example.html
6Integrating QML and C++http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html
7Exposing Attributes of C++ Types to QML http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html
8Defining QML Types from C++http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html
9


 

星期四, 四月 02, 2015

QT 5 i18n sample(or example ) step by step

1.新建一个目录 
  cd c:\temp;mkdir testi18n
cd testi18n

2.新建最简单cpp
 i18n.cpp
#include <QApplication>
#include <QLabel>
#include <QTranslator>
#include <QDebug>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);

    // translation file for application strings
    QTranslator translator;
   bool result= translator.load("superapp_zh_CN",":/i18n"); //这里的:/i18n 可以参考后面的 i18n.qrc 中的prefix中的对应关系
   qDebug()<<"load resource flag:"<<result;
               app.installTranslator(&translator);
                 qDebug()<<QLocale::system().name();
QLabel * label = new QLabel(QObject::tr("Hello"));//应该根据语言切换
           qDebug()<<QObject::tr("Hello"); //应该根据语言切换
label->show();
app.exec();
}
3.创建项目文件
 qmake -project //建立testi18n.pro文件
4.编辑项目文件,加入i18n 字典说明
    在testi18n.pro中加入英文和中文两个数据字典文件:
TRANSLATIONS    = superapp_en_US.ts \
                     superapp_zh_CN.ts 
5.创建资源文件
 lupdate testi18n.pro //第3步建立
  C:\temp\qt\testi18n>lupdate testi18n.pro
Updating 'superapp_en_US.ts'...
    Found 1 source text(s) (0 new and 1 already existing)
Updating 'superapp_zh_CN.ts'...
    Found 1 source text(s) (0 new and 1 already existing)

6.使用linguist来编辑翻译字典
    注意打开打开翻译翻译必须确认,也就是蓝色的对号,然后保存,如果不保存,最后生成字典二进制资源文件的时候,将不会被编译,
    直接打开.ts文件可以看到,没有点对号确认的字典项目对应 一个type="unfinished",只有确认了之后,才变成标准的
<translation type="unfinished">你好世界</translation>
 linguist里 确认后变成:
        <translation>你好世界</translation>
7.编译生成二进制字典文件
 lrelease testi18n.pro
C:\temp\qt\testi18n>lrelease testi18n.pro
Updating 'C:/temp/qt/testi18n/superapp_en_US.qm'...
    Generated 1 translation(s) (1 finished and 0 unfinished)
Updating 'C:/temp/qt/testi18n/superapp_zh_CN.qm'...
    Generated 1 translation(s) (1 finished and 0 unfinished)

8.建立资源文件i18n.qrc
  <RCC>
<qresource prefix="/i18n" > //注意prefix 是用来标明在最终二进制文件中资源文件的引用目录,可以是唯一的任意字符串
<file>superapp_en_US.qm</file>
<file>superapp_zh_CN.qm</file>
</qresource>
</RCC>
9.将资源文件加入项目文件testi18n.pro中
RESOURCES +=i18n.qrc

10.生成Makefile文件
   qmake testi18n.pro

11.编译生成.exe文件
   make

12.运行
 release\testi18n.exe


星期四, 三月 05, 2015

javafx Scene Builder 2.0 如何给anchorpane加入一个本地背景图像

通过Css来加入:
-fx-background-image:url("file:///C:/nyayanew/config/game3/bgl1f2.jpg")
类似代码:
File f = new File("C:\\nyayanew\\config\\game3\\bgl1f2.jpg");
center.setStyle("-fx-background-image:file:///" + f.getAbsolutePath().replace("\\", "/"));

星期五, 一月 23, 2015

如何在JavaFx 8里实现 Hover效果。

css 3 transform:
 .myimage:hover {
  background-color: #dae7f3;
  transform: translate(-5px,-5px);
  effect: dropshadow( three-pass-box , rgba(0,0,0,1) , 5, 0.0 , 0 , 1 );
  box-shadow: 5px 5px 15px rgba(67, 72, 84, 0.5);
}

但是javafx 8只支持css 2.1 和部分css 3的语法,恰恰transform不在此列:
不过可以通过-fx-translate-x,和draopshadow实现悬浮图片或者其他物体的效果.
在css文件中定义一下class selector,然后在JavaFX Scene Builder 2.0 设置 style class 为myButton即可.
.myButton:hover {
  -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,1) , 5, 0.0 , 0 , 1 );
   -fx-translate-x: -5px;
   -fx-translate-y: -5px;
}

星期三, 一月 21, 2015

how ant task read manifest.mf from another jar file.

经常需要在打包可执行jar包的时候,将众多jar打包成一个jar包,
但是只有一个主项目的MANIFEST.MF是需要的。其他的jar包的
MANIFEST.MF都可以忽略掉。
其实很简单的方法:
        <zip destfile="final.jar">
            <zipfileset src="store/temp_final.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA,META-INF/MANIFEST.MF"/>
这里将其他jar包的MANIFEST.MF给去掉了。
            <zipfileset src="dist/project.jar" includes="META-INF/**"/>           
这里将project.jar里的MENIFEST.MF放到最终的jar包里
        </zip>
zipfieset 的prefix属性是用来指明最终jar包里的目录结构,这提供了更加灵活的方式。
不过这里不需要通过prefix来指明最终的jar包目录结构,如果是通过引入一个文件作为MANIFEST.MF,prefix属性就是经常需要的了。
不过一个文件就是使用<fileset >任务来引入了。


星期四, 一月 01, 2015

curl link static under windows x64 error:undefined reference to WSAIoctl@36

依然是少了link 库的原因。
加入一下库即可连接成静态库,避免错误

libwldap32.a libws2_32.a libwsock32.a \libmswsock.a