Qt 5 の未来は明るいブログ

Qt 5 で全角文字を半角に変換する #01

Published: 2013-03-27 / Last modified: 2013-03-28

きっかけ

実は仕事で扱っている、あるテキストデータの日付の項目に「03/27」と全角で書いてあって5回くらいためいきをついた後のつぶやきなのですが、Qt には全角英数を半角化したり、ひらがなをカタカナに変換するような機能はありません。

変換するコードを書いてみる

unicode の FF00~FFEF(.pdf)0000~007F(.pdf) を参考に全角の記号と数字、アルファベット(大文字と小文字)を半角にするコードを書くと以下のようになります。

static QString fullWidth2halfWidth(const QString &str)
{
    QString ret = str;

    for (ushort i = 0xFF01; i < 0xFF5F; ++i) {
        ret = ret.replace(QChar(i), QChar(i - 0xFEE0));
    }

    return ret;
}

全角カタカナ、全角句読点も変換や、逆変換も同じようなコードで対応できるでしょう。

Continue reading...

Qt 5.1 に HMAC 対応が入っていたのでメモ

Published: 2013-03-21 / Last modified: 2013-03-21

Qt の開発メーリングリストで今年のはじめに Playground: Crypto module という議論があったのですが、それを見逃していたのでメモ。

Qt 5 対応の QCA 的なライブラリが欲しくて色々探していたら、Qt 5.1 から HMAC のサポートが QtCore に入る ということがわかりました。

新たに QMessageAuthenticationCode というクラスが追加され、以下のように簡単に HMAC-SHA1() が計算できるようになります。

QByteArray key = "key";
QByteArray message = "The quick brown fox jumps over the lazy dog";
...
QMessageAuthenticationCode code(QCryptographicHash::Sha1);
code.setKey(key);
code.addData(message);
code.result().toHex();      // returns "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"

簡易的に以下のように書くことも可能です。

QMessageAuthenticationCode::hash(message, key, QCryptographicHash::Sha1).toHex();

Continue reading...

Qt for iOS の紹介

Published: 2013-03-06 / Last modified: 2013-03-06

Qt BlogQt for iOS Preview という記事が投稿されました。

Qt の iOS サポートは今春リリース予定の 5.1 でプレビュー的なものが提供され、今秋リリース予定の 5.2 で一応正式になる予定とのことです。

※去年末の Qt Developer Days での展示の様子(2:15 くらいから Qt for iOS のデモが見られます)

Continue reading...

QCon Tokyo 2013 で Qt 5 についての講演をします

Published: 2013-03-04 / Last modified: 2013-03-04

2013年4月23日(火)に JA共済ビル カンファレンスホール で開催される QCon Tokyo 2013 で、Qt のお話をさせていただくことになりました

QCon Tokyo は、最新技術を追い求めるデベロッパのための情報コミュニティ 「InfoQ」が主催する、エンジニアによるエンジニアのためのハイクオリティなワールドワイド カンファレンスです。

以前より、QCon tokyo で Qt の話をしたいなーと思っていたので、本当に楽しみにしています。

参加される方は http://qcontokyo.com/registration.html から登録お願いします。有料のイベントになります。

Qt ブースの展示を手伝っていただける方は 関東 Qt 勉強会のグループ でお知らせください。

FolderListModel の showDotAndDotDot の修正

Published: 2013-02-25 / Last modified: 2013-02-25

という話があったので、バグレポートを書いてパッチをプッシュ してみました。

こっちは Linux では再現しないようなのでだれか調べてくれる人募集中。

関東Qt勉強会 #12 開催しました

Published: 2013-02-17 / Last modified: 2013-02-17

2013年2月16日(土曜日)に 関東 Qt 勉強会 #12豆蔵 さんのトレーニングルームで開催しました。

今回は発表などは募集せずに、「もくもく(と好きな事をするスタイル)」で行いました。

フィードバック

最初に自己紹介をしたときに、「今日すること」を発表したのだから、最後にも「今日やったこと」を発表したほうがよかったんじゃない?という意見を多数いただきました。次回はそうしましょう。

参加した方で、その他にもこんなことしてみたい!というアイデアがあればお知らせ下さい

次回予告

2013年3月23日に 関東Qt勉強会 #13 #qtjp を行います。気軽に参加してください。

Continue reading...

Relational database plugin for QML

Published: 2013-02-03 / Last modified: 2013-02-03

This plugin allows you to access relational database in QML.

import QtQuick 2.0
import me.qtquick.Database 0.1

Item {
id: root
width: 400
height: 300

Database {
id: db
connectionName: 'test'
type: "QSQLITE"
databaseName: ":memory:"

TableModel {
id: table
tableName: 'Test'
primaryKey: 'key'
property int key
property string value
}

SqlModel {
id: select
query: "SELECT COUNT(key) as keys FROM Test WHERE value LIKE ?"
params: ['%Qt%'] }
}

Rectangle {
id: header
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 2
height: field.font.pixelSize * 1.5

border.color: 'gray'
border.width: 1

TextInput {
id: field
anchors.fill: parent
anchors.margins: 2
focus: true


Keys.onReturnPressed: {
select.select = false
table.insert({'value': field.text})
field.text = ''
select.select = true
}
}
}

Flickable {
anchors.top: header.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: footer.top
contentWidth: width
contentHeight: contents.height
Grid {
id: contents
width: parent.width
flow: Grid.TopToBottom
rows: table.count + 1
Text {
width: 100
text: 'key'
}

Repeater {
model: table
Text {
text: model.key
}
}
Text {
text: 'value'
}

Repeater {
model: table
Text {
text: model.value
MouseArea {
anchors.fill: parent
onClicked: {
select.select = false
table.remove({'key': model.key})
select.select = true
}
}
}
}
}
}
Text {
id: footer
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
text: 'the number of values that contains "Qt" is %1.'.arg(select.count > 0 ? select.get(0).keys : '0')
}

}

Continue reading...