« 高校合格おめでとう | トップページ | 高速道路の料金が変わり過ぎ »

2014年4月13日 (日)

Qt5: 入門Qt4〜勝手にQt5 その1

今年に入ってから、2月初旬までの間、Qt5を触ってました。

Qt5にはチュートリアルが豊富にあるので、それなりに独習できる環境にあると思います。
しかし、流行はQtQuick系とかモバイル系とか。
諸事情により、今のところ僕の目的はデスクトップ・アプリなので方向性が異なります。

書籍を探したところ、Qt5デスクトップに関するものは見つけられずじまい。
もっとも、Qt5の公式サイトには情報がみっちり書いてあるので、まあいいのです。
ずっと以前に購入したO'Reillyの「入門Qt4プログラミング」があるし。
この本と公式サイトと見比べて学習すれば、割とサクサク進むでしょう。

と、思って始めたものの、最初の一歩に手間取りました。
Qt4 → Qt5にあたり、以前と僕の前提が随分違います。
OSはUbuntu → OSX10.9に変更、QtCreatorもバージョン間で操作に差異あるし。

なので、少しだけ手間取った箇所だけ備忘録。
プラットホーム: Mac(OSX10.9) Qt5.2.1 (dmgからインストール)、QtCreator: 3.0.1
しばらくは、この環境が前提です。

まず、1章のウィジェットのレイアウト節では、いきなりのコンパイル・エラー。
Qt5公式サイトに記事があったけど、#includeだし面倒なので簡単な方法で修正。

#include <QApplication>
#include <QtWidgets>

本当は使用するWidgetsだけインクルードするのが良いのでしょうが、とりあえずはこれで。

続いて、公式サイトの記述 に従い、SIGNALとSLOTを書き換えてみます。

QObject::connect(spinBox, &QSpinBox::valueChanged, slider, &QSlider::setValue);
QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);

のように記述してみたのですが、コンパイル・エラーになってダメです。
ネットを探したら、同様に悩んでる方がいました。
そして、そこの素敵な回答 を参考にしたら、期待通りに回避できました。

QObject::connect(spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), slider, &QSlider::setValue);
QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);

そっか、QSpinBoxのvalueChangedはoverloadされてるから、前のはダメだったのか。
んー、文法的にマクロより安全だろうけど、可読性が落ちるのは嫌だなぁ。
って事で、僕はケース・バイ・ケースにします。

でも、「素敵な回答」にあったけど、テンプレートで解決するのもアリですね。

« 高校合格おめでとう | トップページ | 高速道路の料金が変わり過ぎ »

仕事部屋」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/564846/59463976

この記事へのトラックバック一覧です: Qt5: 入門Qt4〜勝手にQt5 その1:

« 高校合格おめでとう | トップページ | 高速道路の料金が変わり過ぎ »

2014年11月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
サイト内検索
ココログ最強検索 by 暴想

Twitter

開発Twitter

無料ブログはココログ