c++

Qt環境のアプリから別のMac OS X .app形式のアプリでファイルを開く メモ

Qt環境のアプリから別のMac OS X .app形式のアプリでファイルを開きたかったので、QProcessから.app形式のアプリに引数でファイルパスを渡してやれば大丈夫だろうと思っていたのですが、あまり上手くいきませんでした。例えばPreview.appでhoge.pngを開きた…

Qt Macでアプリケーションアイコンへのドラッグ&ドロップに対応する

この前Qtを使ってMacでアプリケーションを作成したとき、アプリケーションのアイコンへファイルのドラッグ&ドロップしても何も反応しないことに気が付きました。 Windowsだとコマンドライン引数としてドロップしたファイルのパスが渡された状態でアプリケー…

Qt QProcessで書き込みチャンネルを終了させる(プロセスにEOFを送る)方法

QProcessで起動したプロセスが例えば下記のようなコードを含んでおり標準入力のEOFを待っている場合があります。 int c; while( ( c = getchar() ) != EOF ) { /*ごにょごにょ*/ } このときQProcessのcloseWriteChannel()という関数を実行することで書き込み…

C++ boostを使用してSHA-1 ハッシュ値の計算 メモ

C++ Boost.Uuidのdetailにあるsha1クラスを用いてSHA-1 ハッシュ値を計算する方法のメモです。 SHA-1の場合ハッシュ値は20バイト固定なのでboost::array<boost::uint8_t,20>を返すような関数を作りました。main.cpp #include <boost/uuid/sha1.hpp> #include <boost/cstdint.hpp> #include <boost/array.hpp> #include <iostream> typedef boost::arr</iostream></boost/array.hpp></boost/cstdint.hpp></boost/uuid/sha1.hpp></boost::uint8_t,20>…

CodeIQ 小飼弾さんからの出題 「百聞は一見に如かず~文字列処理+画像処理=?」の解答

だいぶ前の話ですが去年の年末にブログ404 Blog Not Foundで有名な小飼弾さんからgihyo.jp経由でCodeIQに百聞は一見に如かず~文字列処理+画像処理=?という題名で出題されていた問題に挑戦した際の解答をブログにメモしておこうと思います。既に締め切り…

Qt デフォルトで使用可能な組み込みアイコン QStyle::StandardPixmaps

Qtにはデフォルトで組み込まれているアイコンがいくつかあり、使用出来るアイコンの種類についてはQStyleのQStyle::StandardPixmapsというenumに列挙されています。 このenumをQStyleのstandardIconまたはstandardPixmap関数の引数に渡してやれば指定した種…

Qt ソートON状態のアイテムビュークラスへのアイテムの追加の際の実行コスト

QtにはQAbstractItemViewを継承したアイテムビュークラスがいくつかデフォルトで用意されていますが、この内のQListWidget,QTableView,QTreeViewとこれらを継承したクラス(QTableWidget, QTreeWidget)にはアイテムを自動でソートして表示してくれる機能があ…

Qt 意外と使えるQTabBar

QTabWidgetのタブの部分だけのウィジェットとしてQTabBarというクラスがあります このQTabBarは意外と実用的なクラスですがQt Designerで追加できるウィジェットには含まれていません。 そのため知名度は低いように思ったので紹介してみようと思います。この…

Qt QGraphicsItem でHard-Edgeなギザギザ曲線を描画する

QtのQGraphicsEllipseなどのアイテムを描画すると、曲線部分でもどれだけ拡大していっても輪郭はなめらかに補間されたベクタ形式として表示されますが、これをラスタ形式のように輪郭がHard-Edgeでギザギザな輪郭をもったアイテムとして表示する方法を以下に…

Qt QColor で使用できるカラーネーム

QColorではのコンストラクタやsetNamedColor関数で"#RRGGBB"等の形式の文字列によって色を指定することができます。 ですがこういった16進数を文字列で表現した形式ではなく"blue"や"limegreen"などのようにカラーネームを使用することもできます。 使用でき…

C++のコードをブラウザ実行可能なJavaScriptに変換するEmscripten導入メモ

C/C++などllvm/clangでコンパイル可能なコードをブラウザで実行可能なJavaScriptに変換してくれるコンパイラツールであるEmscriptenの導入を行った際のメモです。環境はOS X 10.8 Mountain LionのMacBook Air (11-inch and 13-inch, Mid 2011)です。Emscript…

C++ 双方向マップ boost::bimaps 覚え書き

双方向のからアクセス可能なmapとしてboost::bimapsがあります。 今回はそのboost::bimapsの覚え書きです。 まずは単純な1対1の双方向mapとして使う場合 #include <string> #include <iostream> #include <boost/bimap/bimap.hpp> int main() { // int : string の1対1のmap typedef boost::bimaps::bi</boost/bimap/bimap.hpp></iostream></string>…

C++ イテレータインクリメント時の前値、後置の違い

C++ではforループなどでイテレータのインクリメントをする際、前値形式(例: ++itr)と後置形式(例: itr++)のどちらの方法でインクリメントしても計算結果は同じになりますが、多くの場合 わずかですが前値形式(++itr)の方が後置形式(itr++)より高速に動作しま…

Qt foreachの注意点 その2

Qt foreachの注意点 その1 - unstable diaryQtのforeachを使う際の注意点その2です。Qtのforeachではc++11の範囲for文(range-based for)やboostのBOOST_FOREACHのように 受け取るコンテナの内部要素の型を参照(非const)で受けとり、コンテナの内部の値を変更…

Qt QGraphicsItemごとに個別にアンチエイリアスをかける

QGraphiceViewではsetRenderHint関数でQPainter::Antialiasingを設定してやることで 以下のようにアンチエイリアスのオン オフを切り替えられます。アンチエイリアス オン アンチエイリアス オフ このようにアンチエイリアスの設定を切り替えられますが、 こ…

Qt foreachの注意点 その1

c++11で範囲for文(range-based for)が追加されたことで、c++でも以下のようにコンテナの内部のすべての要素を簡単に捜査できるようになりました。 std:vector<int> vec; for( const int value : vec ) { std::cout << value << std::endl; } Qtではc++の言語機能</int>…