シグナル/スロット

Qt をはじめよう! 第12回: シグナルとスロットを作成しよう

Published Tuesday July 20th, 2010 | Leave a comment
Posted in Qt をはじめよう! | Tags: ,

前回は QObject の派生クラスの作成について学びました。今回は前回作成した Object クラスにシグナルとスロットを作成してみましょう。 Qt のオブジェクトの使用方法について 前回の記事で Qt のオブジェクトのコピーコンストラクタと代入演算子についてのコメントをいただきましたので、あらためてここで解説します。 Qt では [qt QObject] を基底クラスとした様々な派生クラスを使用しますが、基本的にこれらのオブジェクトのインスタンスはヒープ上に new で生成して使用します。インスタンスの管理やメソッドなどへの受け渡しはポインタで行います。 Qt のオブジェクトモデルでは、各インスタンスは一意であり以下の理由によりコピーと代入を禁止しています。 [qt QObject objectName m=#objectName-prop] は各インスタンスに固有の値であるべきでコピーすべきではない QObject の親子関係をコピーできない 接続済みのシグナルやスロットをコピーすべきかどうかが不明のため 動的に割り当てられたプロパティの値までコピーすべきかどうかが不明のため 同じ内容のインスタンスが必要な場合には別のインスタンスを生成し、各プロパティの値をコピーして使用してください。 Qt が提供する QObject の派生クラスでは、クラス定義の中で [qt “” Q_DISABLE_COPY(クラス名) l=qobject m=#Q_DISABLE_COPY] というマクロを使用してコピーコンストラクタと代入演算子を無効にしています。前回の例では登場しませんでしたが、QObject の派生クラスを作成する際にはこのマクロを使用して、コピーと代入を明示的に禁止するようにしましょう。 object.h class Object : public QObject { Q_OBJECT Q_DISABLE_COPY(Object) public: … }; 詳しくは Qt のドキュメント [qt […]

Read More

Qt をはじめよう! 第12回: シグナルとスロットを作成しよう

Published Tuesday July 20th, 2010 | Leave a comment
Posted in Qt をはじめよう! | Tags: ,

前回は QObject の派生クラスの作成について学びました。今回は前回作成した Object クラスにシグナルとスロットを作成してみましょう。 Qt のオブジェクトの使用方法について 前回の記事で Qt のオブジェクトのコピーコンストラクタと代入演算子についてのコメントをいただきましたので、あらためてここで解説します。 Qt では [qt QObject] を基底クラスとした様々な派生クラスを使用しますが、基本的にこれらのオブジェクトのインスタンスはヒープ上に new で生成して使用します。インスタンスの管理やメソッドなどへの受け渡しはポインタで行います。 Qt のオブジェクトモデルでは、各インスタンスは一意であり以下の理由によりコピーと代入を禁止しています。 [qt QObject objectName m=#objectName-prop] は各インスタンスに固有の値であるべきでコピーすべきではない QObject の親子関係をコピーできない 接続済みのシグナルやスロットをコピーすべきかどうかが不明のため 動的に割り当てられたプロパティの値までコピーすべきかどうかが不明のため 同じ内容のインスタンスが必要な場合には別のインスタンスを生成し、各プロパティの値をコピーして使用してください。 Qt が提供する QObject の派生クラスでは、クラス定義の中で [qt “” Q_DISABLE_COPY(クラス名) l=qobject m=#Q_DISABLE_COPY] というマクロを使用してコピーコンストラクタと代入演算子を無効にしています。前回の例では登場しませんでしたが、QObject の派生クラスを作成する際にはこのマクロを使用して、コピーと代入を明示的に禁止するようにしましょう。 object.h class Object : public QObject { Q_OBJECT Q_DISABLE_COPY(Object) public: … }; 詳しくは Qt のドキュメント [qt […]

Read More

Qt をはじめよう! 第12回: シグナルとスロットを作成しよう

Published Tuesday July 20th, 2010 | Leave a comment
Posted in Qt をはじめよう! | Tags: ,

前回は QObject の派生クラスの作成について学びました。今回は前回作成した Object クラスにシグナルとスロットを作成してみましょう。 Qt のオブジェクトの使用方法について 前回の記事で Qt のオブジェクトのコピーコンストラクタと代入演算子についてのコメントをいただきましたので、あらためてここで解説します。 Qt では [qt QObject] を基底クラスとした様々な派生クラスを使用しますが、基本的にこれらのオブジェクトのインスタンスはヒープ上に new で生成して使用します。インスタンスの管理やメソッドなどへの受け渡しはポインタで行います。 Qt のオブジェクトモデルでは、各インスタンスは一意であり以下の理由によりコピーと代入を禁止しています。 [qt QObject objectName m=#objectName-prop] は各インスタンスに固有の値であるべきでコピーすべきではない QObject の親子関係をコピーできない 接続済みのシグナルやスロットをコピーすべきかどうかが不明のため 動的に割り当てられたプロパティの値までコピーすべきかどうかが不明のため 同じ内容のインスタンスが必要な場合には別のインスタンスを生成し、各プロパティの値をコピーして使用してください。 Qt が提供する QObject の派生クラスでは、クラス定義の中で [qt “” Q_DISABLE_COPY(クラス名) l=qobject m=#Q_DISABLE_COPY] というマクロを使用してコピーコンストラクタと代入演算子を無効にしています。前回の例では登場しませんでしたが、QObject の派生クラスを作成する際にはこのマクロを使用して、コピーと代入を明示的に禁止するようにしましょう。 object.h class Object : public QObject { Q_OBJECT Q_DISABLE_COPY(Object) public: … }; 詳しくは Qt のドキュメント [qt […]

Read More

Qt をはじめよう! 第12回: シグナルとスロットを作成しよう

Published Tuesday July 20th, 2010 | Leave a comment
Posted in Qt をはじめよう! | Tags: ,

前回は QObject の派生クラスの作成について学びました。今回は前回作成した Object クラスにシグナルとスロットを作成してみましょう。 Qt のオブジェクトの使用方法について 前回の記事で Qt のオブジェクトのコピーコンストラクタと代入演算子についてのコメントをいただきましたので、あらためてここで解説します。 Qt では [qt QObject] を基底クラスとした様々な派生クラスを使用しますが、基本的にこれらのオブジェクトのインスタンスはヒープ上に new で生成して使用します。インスタンスの管理やメソッドなどへの受け渡しはポインタで行います。 Qt のオブジェクトモデルでは、各インスタンスは一意であり以下の理由によりコピーと代入を禁止しています。 [qt QObject objectName m=#objectName-prop] は各インスタンスに固有の値であるべきでコピーすべきではない QObject の親子関係をコピーできない 接続済みのシグナルやスロットをコピーすべきかどうかが不明のため 動的に割り当てられたプロパティの値までコピーすべきかどうかが不明のため 同じ内容のインスタンスが必要な場合には別のインスタンスを生成し、各プロパティの値をコピーして使用してください。 Qt が提供する QObject の派生クラスでは、クラス定義の中で [qt “” Q_DISABLE_COPY(クラス名) l=qobject m=#Q_DISABLE_COPY] というマクロを使用してコピーコンストラクタと代入演算子を無効にしています。前回の例では登場しませんでしたが、QObject の派生クラスを作成する際にはこのマクロを使用して、コピーと代入を明示的に禁止するようにしましょう。 object.h class Object : public QObject { Q_OBJECT Q_DISABLE_COPY(Object) public: … }; 詳しくは Qt のドキュメント [qt […]

Read More

Qt をはじめよう! 第10回: シグナルとスロット

Published Thursday June 17th, 2010 | 1 Comment on Qt をはじめよう! 第10回: シグナルとスロット
Posted in Qt をはじめよう! | Tags: ,

前回、前々回と、Qt のユーザーインターフェースの作成について学びました。 今回から数回に渡って Qt のオブジェクト間通信の仕組みであるシグナルとスロットについて学んでいきましょう。 シグナルとスロットとは 一般的に GUI プログラミングでは、一つのウィジェットやオブジェクトの状態が変わった際に何かしらの処理を行うために、他のウィジェットやオブジェクトにそれを通知する仕組みが必要です。前回、および前々回のサンプルアプリケーションの場合、ユーザーが Close ボタンを押した際にウィンドウを閉じる処理をするために「ボタンが押された」ことをどこかに通知する必要があります。 これまでの多くのツールキットでは、コールバック関数を登録しそれを呼び出す方法でこれを実現してきました。しかしコールバックには色々な問題があります。 シグナルとスロットは、コールバック関数に変わる新しいオブジェクト間通信の仕組みです。コールバック関数の問題であった引数の型の安全性を保証し、オブジェクト指向の重要な理念であるカプセル化の思想に基づいた汎用性の高いクラスの設計を可能にします。

Read More

Qt をはじめよう! 第10回: シグナルとスロット

Published Thursday June 17th, 2010 | Leave a comment
Posted in Qt をはじめよう! | Tags: ,

前回、前々回と、Qt のユーザーインターフェースの作成について学びました。 今回から数回に渡って Qt のオブジェクト間通信の仕組みであるシグナルとスロットについて学んでいきましょう。 シグナルとスロットとは 一般的に GUI プログラミングでは、一つのウィジェットやオブジェクトの状態が変わった際に何かしらの処理を行うために、他のウィジェットやオブジェクトにそれを通知する仕組みが必要です。前回、および前々回のサンプルアプリケーションの場合、ユーザーが Close ボタンを押した際にウィンドウを閉じる処理をするために「ボタンが押された」ことをどこかに通知する必要があります。 これまでの多くのツールキットでは、コールバック関数を登録しそれを呼び出す方法でこれを実現してきました。しかしコールバックには色々な問題があります。 シグナルとスロットは、コールバック関数に変わる新しいオブジェクト間通信の仕組みです。コールバック関数の問題であった引数の型の安全性を保証し、オブジェクト指向の重要な理念であるカプセル化の思想に基づいた汎用性の高いクラスの設計を可能にします。

Read More

Qt をはじめよう! 第10回: シグナルとスロット

Published Thursday June 17th, 2010 | 2 Comments on Qt をはじめよう! 第10回: シグナルとスロット
Posted in Qt をはじめよう! | Tags: ,

前回、前々回と、Qt のユーザーインターフェースの作成について学びました。 今回から数回に渡って Qt のオブジェクト間通信の仕組みであるシグナルとスロットについて学んでいきましょう。 シグナルとスロットとは 一般的に GUI プログラミングでは、一つのウィジェットやオブジェクトの状態が変わった際に何かしらの処理を行うために、他のウィジェットやオブジェクトにそれを通知する仕組みが必要です。前回、および前々回のサンプルアプリケーションの場合、ユーザーが Close ボタンを押した際にウィンドウを閉じる処理をするために「ボタンが押された」ことをどこかに通知する必要があります。 これまでの多くのツールキットでは、コールバック関数を登録しそれを呼び出す方法でこれを実現してきました。しかしコールバックには色々な問題があります。 シグナルとスロットは、コールバック関数に変わる新しいオブジェクト間通信の仕組みです。コールバック関数の問題であった引数の型の安全性を保証し、オブジェクト指向の重要な理念であるカプセル化の思想に基づいた汎用性の高いクラスの設計を可能にします。

Read More
Get started today with Qt Download now