2011-01-01から1年間の記事一覧

QDockWidgetがリサイズできなかった

DockWidgetが、ドック状態の時に(マウス操作で)サイズ変更できなくて、ずっと困ってたんですよね。floatingの時はできるのに! 簡単なDockWigetアプリを作ってみると、ちゃんとresizeできる。でも、作りこんでるアプリの時は、resizeできない。何でだ!(…

ToolBarやDockWidgetの状態を保存する

http://d.hatena.ne.jp/QtCoder/20110810/1312993363 (設定を保存する Qtの特徴として、ToolBarやDockWidgetを使ったアプリケーション開発が挙げられますが、これらWidgetのフローティング状態や位置・サイズを保存しておくために、restoreGeometry、saveGeo…

設定を保存する

アプリケーションの設定などを簡単に保存できるように、QSettingsという便利なクラスがあります。設定の保存は、iniファイルまたはレジストリを選べます。とにかく便利なので、自作していた設定保存クラスとはおさらばですw 以下、設定クラスを開き、保存さ…

メニューアイテムにショートカットキーを指定する

指定の方法が沢山あって、超クールです! ui->action_FileNew->setShortcuts( QKeySequence::New ); ui->action_FileSaveAs->setShortcut( tr("Ctrl+Shift+S") ); ui->action_FileClose->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_W ) );

カーソルを設定する (Qt標準カーソル)

#include <QCursor> QCursor cur; cur.setShape( Qt::CrossCursor ); // cur.setShape( Qt::OpenHandCursor ); // cur.setShape( Qt::ClosedHandCursor ); setCursor( cur ); http://doc.qt.nokia.com/latest/qcursor.html (Qt標準カーソル一覧はこちら</qcursor>

MacかWindowsか判定する

色々とdefineされているようなので、それを使えばOKっぽいです。 #ifdef Q_WS_WIN // Windowsの場合に、仕方なく特別処理するコード #endif #ifdef Q_WS_MAC // Macの場合に、仕方なく特別処理するコード #endif http://doc.qt.nokia.com/latest/qtglobal.ht…

keyReleaseが勝手に発行される

キーボードを押した時、keyPressイベントが発行されますが、押し続けていると「オートリピート」という状態になり、キーを離してないのにkeyReleaseイベントも発行されてしまいます。keyReleaseイベントがオートリピートで起きたのか否かは、isAutoRepeatで…

MouseMoveが来ない!?

QtのWidgetは、デフォルトでは「MouseDown状態」でないとMouseMoveイベントが飛んで来なくてハマります。コンストラクタで setMouseTracking を呼んでやりましょう。 WidgetHoge::WidgetHoge( QWidget *parent) : QWidget(parent) { // マウスボタンを押して…

OS標準のファイルダイアログを使う

Qt標準のファイルダイアログは、普通のアプリで目にするものと大分見た目が違います。申し訳ないですが、「何この怪しいソフト」って思われても仕方ありません。というわけで、特にこだわりが無いのなら、OS標準のファイルダイアログを使っておきましょう。 …

デスクトップのパスを取得する

デスクトップやTempディレクトリなどの、特別なフォルダ (Special Folders) のパスを得るのには、QDesktopServices::storageLocationを使います。 #include <QDesktopServices> // デスクトップのパスを取得 QString folder = QDesktopServices::storageLocation( QDesktopServ</qdesktopservices>…

イベントハンドラ、connect、SIGNAL、SLOT

GUIアプリというのは、マウスやキーボードなどの外部からのイベントに対応して処理を書く、イベントドリブン方式でプログラムを書きます。古くはWin32のメッセージから、今時ならActionScriptのイベントリスナーなど、徐々に記述の仕方は洗練されています。 …

文字化けを防ぐ

UTF8でコードを書いていると、ラベルやタイトルに日本語で文字列を設定した時、文字化けします。そんな時、予めこう宣言しておくと、文字化けしなくなります。 #include <QTextCodec> QTextCodec::setCodecForTr( QTextCodec::codecForName("utf8") );</qtextcodec>

プロジェクトを移動させる

Qtのプロジェクトはシンプルで、移動させるのも簡単ですが、ひとつだけハマる事が。*.userファイルも一緒に移すと、何故だかビルドできなくなります。環境ごとの設定だったりするんでしょうか? というわけで、私はサクっと消してしまっています(笑)。特に…

OpenMPを使う

QtCreatorでOpenMPを使う方法です。先ず、*.proファイルに以下を追加します。OpenMPのヘッダを使えるようになります。 QMAKE_CXXFLAGS += -fopenmp LIBS += -fopenmp OpenMPは、pthreadGC2.dll というDLLを使うので、debugフォルダ、releaseフォルダに配置し…

timeGetTime、getTickCount的な処理

Win32における、timeGetTime や getTickCount のような、処理時間をミリ秒で測定する場合の便利なクラスがあります。 #include <QElapsedTimer> QElapsedTimer et; et.start(); ///////////////////////// // 計測したい処理をここに ///////////////////////// qint64 t = </qelapsedtimer>…

拡張子を判定する

QFileInfoというクラスがあるので、ファイル名を渡して、suffix() メソッドで拡張子を取得できます。 QFileInfo fi; fi.setFile( fileName ); QString ext = fi.suffix(); ext = ext.toLower(); if (ext == "png") img.save( fileName, "PNG" ); if (ext == …

謎のエラーメッセージ

QtCreatorでビルドしていると、 “error: collect2: ld returned 1 exit status” という謎のエラーメッセージが出力されます。「何が原因なの!?」って思いますが、「4. コンパイル出力」タブを開くと理由が出てます。「プロジェクトに追加してなかった」と…

QML Scene Graph におけるテキスト描画

http://labs.qt.nokia.co.jp/2011/07/21/text-rendering-in-the-qml-scene-graph.html (QML Scene Graph におけるテキスト描画"Distance Field Alpha Testing" ですか。よく分からないんですが、凄そうです。低解像度なビットマップ構造から、ローコストで高…

SIMDを使う

QtCreatorでSIMD (MMXやSSE) を使う方法です。先ずは *.proファイルに、 QMAKE_CXXFLAGS += -mmmx QMAKE_CXXFLAGS += -msse2 QMAKE_CXXFLAGS += -msse3 と追加します。あとはソースコード側でヘッダのinclude。 #include <mmintrin.h> // SSE #include <emmintrin.h> // SSE2 #include <pmmintrin.h></pmmintrin.h></emmintrin.h></mmintrin.h>…

インクルードパスを追加する

Qtはプロジェクト管理がシンプルで素晴らしいですね。プロジェクトファイル (*.pro) だけで管理できるので。 自作ライブラリ等をincludeしたい場合は、*.proファイルに、 INCLUDEPATH += ../_mylib という具合に、*.proファイルからの相対パスを指定します。…

日記について

Qtを使った開発でのメモや疑問を記した日記です。 http://qt.nokia.com/title-jp/ (クロスプラットフォームの UI 開発フレームワーク - Qt