プログラマのためのLSI - TECオープン欠陥

2008年2月25日·年投稿BLA BLA BLAC / C + +Linuxの · 表示のコメント

LSI - TEC 、企業統合sitema USPの国際的に有名な研究の一部は、デジタルテレビに関連したプロジェクトの開発に取り組む人材を募集しています。

要件:

  • C、C + +またはJava;
  • Sitema組込みLinux;
  • Subversionの。
  • autotoolsの;

場所:
サンパウロの大学 - 大学シティキャンパス

興味のある人は彼らの履歴書を送信することがあります。
ヒレルベッヒャー<hilel@lsi.usp.br>

統合された技術システム研究室
集積システム研究室

ブログサーバーの移行

2008年2月23日·で掲示されるブログMySQLは · 表示のコメント

ブログは技術的な問題が発生しているという利点を生かし、私は、サーバーからそれを変更するとWordPressの壊れたバージョンを更新することを決めた。

WordPressのアップデートの詳細は、バージョンにより異なる場合がありますと、で見ることができるサイト

私は、ワードプレス自体のインポート/エクスポートするオプションを使用しますが、古いプロバイダの問題の一つができる私はブログの管理エリアにアクセスすることがないことだった。 であっても何の1つのアップロードを行わずに、私は、もはやブログにログインできなかったと私が得た応答はプロバイダです。

"... ... WordPressの開発者に問い合わせてください..."

私はその後、競争相手に連絡して、爪への移行を決定...

私は使用前償却額は非常にシンプルであり、次のとおりです。

新しいプロバイダを雇う

私は、いくつかのインターネット検索をした友人に相談し、最後にただフォームに入力した、クレジットカードの番号やお支払いの確認を待ちます。

バックアップ

私は、新しいプロバイダの確認を待っている間、私はブログをバックアップしていた。 私はあまりにも多くの"ジャンク"がインストールされていたとして、私はポストを使用してデータベースをバックアップし、WordPressの非常にクリーンなバージョンを使用することを決めた。

MySQLをバックアップするには、私は、そのコマンドラインツールのmysqldumpのものを使いました。 クールな機能(私の考えでは)のmysqlとそのツールの一つは、リモートでそれらを使用できることです。 これは、SysAdminの倍の数回の私の肌を保存しています。

コマンドは単純なものでした:

  =my.old.mysqlserverユーザ@ホスト:〜$ mysqldumpを-ホスト = my.old.mysqlserver 
              -ユーザ = myuserの-パスワード 
              mybkp.sql -データベース myblogdatabase> mybkp.sql 

= My.old.mysqlserver -ホスト:私のMySQLのデータベースであるホストへの接続
-ユーザ= myuserの:接続のためにこのサーバーを使用する。
-パスワード:パスワードのプロンプトを依頼してください。 私はパスワードを直接入力したい場合は、 終了-パスワード= mypassをを持つことできます
Myblogdatabase -データベース:私のブログで使用されるすべてのデータベースのテーブルのダンプ"myblogdatabase'を作成します。
> Mybkp.sql:出力をファイルにリダイレクト。

mysqldumpはそれと同じ状態でデータベースを再作成するのに必要なすべてのSQLを生成します。

データの復元

ダンプファイルの先頭に、古いデータベースへの参照です。 新しいデータベース名が異なる場合は、ダンプファイルを編集する必要があります。 これは、コマンドのsedで行うことができます。

  s /` olddatabase `/` newdatabase `/ mybkp.sql > mynewbkp.sqlユーザ@ホスト:〜$ sedの S / olddatabase `` / `` newdatabase / mybkp.sql> mynewbkp.sql 

復元はmysqlプロンプトを使用して、非常に簡単です。

  =my.new.mysqlserver --user =myuser --passwordユーザ@ホスト:〜$ mysqlの-ホスト = my.new.mysqlserver -ユーザ = myuserの-パスワード
 MySQLの>使用newdatabase。
 MySQLの>。  mynewbkp.sql 

このlogamosは、我々はまだ空の新たな拠点を、入力し、新しい、古いからテーブルとデータを再作成するSQL文の完全なダンプファイルの操作を行います。

Wordpressをアップグレードする

WordPressのアップデートは、基本的な手順に従いますインストールをダウンロードし、解凍は、目的の場所にコンテンツを移動し、ファイルをwp - config.phpを編集します。

最後に、ブラウザで、ファイルを実行

http://my.blog.root.path/bla/bla/bla/wp-admin/upgrade.php

と出来上がり! あなただけのログイン、管理者ユーザーのためにランダムなパスワードが発行されます。

WordPressをセットアップ

プロバイダがサービスを提供する場合、それは通常、サイトの機能にアクセスするための二つの方法が用意されています。 他の奇妙なURLと同じ機能を提供するので、一つには、アドレスとしてあなたのドメインを使用する標準的な方法です。 今日は私が見つけた理由:DNSプロバイダが前者に任命されている間、私は古いサイトの(熱)機能を妨げることなく、奇妙な新しいプロバイダのURLにアクセスした。

WordProがインストール後に、コンテンツにアクセスしようとすると、古いブログにリダイレクトされます。 それから私は、ブログのurlを設定するための2つのオプションがあることを思い出した。 それはデータベースでいた場所を知るのに十分だった。 テーブル名の論理に従って、テーブルのwp_optionsに到着した。

、GUIツールMySQLクエリブラウザを使用して奇妙な、そのURLにフィールド'オプション名'オプション'SITEURL"と"家庭"に対応するフィールド"がoption_valueの"に変更し、プラグインやテーマをインストールしている間、私は、移行中にそれを使用または享受を開始。 すべてが終った後、私はDNSを変更し、最終的にオプションで元の値を復元。 このコマンドラインは次のようになります。

  ; します。mysql> SELECT * wp_options制限を1から;
 +-----------+---------+-------------+------------- ------------+----------+
 blog_id | option_name | option_value | autoload | | Option_id | blog_id |オプション名| option_valueの|自動ロード|
 +-----------+---------+-------------+------------- ------------+----------+
 | 0 | siteurl | http: // mydomain.com / etc | yes | | 1 | 0 | SITEURL | http://を mydomain.com の/ etc | はい |
 +-----------+---------+-------------+------------- ------------+----------+
 ( 0.00 sec ) セット内の 1(0.00秒)

 ; します。mysql> SELECT * ='http://mydomain.com/etcを"option_valueのwp_optionsから
 +-----------+---------+-------------+------------- ------------+----------+
 blog_id | option_name | option_value | autoload | | Option_id | blog_id |オプション名| option_valueの|自動ロード|
 +-----------+---------+-------------+------------- ------------+----------+
 | 0 | siteurl | http: // mydomain.com / etc | yes | | 1 | 0 | SITEURL | http://を mydomain.com の/ etc | はい |
 | 0 | home | http: // mydomain.com / etc | yes | はい | | | 40 | 0 |ホーム| http://を mydomain.com の/ etc
 +-----------+---------+-------------+------------- ------------+----------+
 ( 0.00 sec ) セット内の 2(0.00秒)

 option_value = 'http://url.estranha.com/etc' MySQLの>更新wp_options 九月 ='http://url.estranha.com/etcを"option_valueここで、='http://mydomain.com/etcを"option_value;
 0.02 sec )クエリの[OK]を、2つの行が影響を受ける(0.02秒)
 Warnings: 0マッチした行:2変更:2警告​​:0

 MySQLの> 

SQLコマンドは、最終的に更新し、第二は、どのオプションが同じURLとサードを持ってチェックするテーブルのフィールドを知ることが第一号だった。 その後、ブログは既に正しい作業のアドレスを指している、とリターンは通常、サイトを通じて行うことができます。

結論

爪上のブログを移行するすべてのデータが失われてから、最善の選択肢ではありません。 私はワードプレスと周りのツールの機能のほとんどを知っているので、私はちょうど、このクローズを得た。 それでも、私は、サスペンスの私の瞬間を持っていた。 記事とは別のホームを最新の状態に保つにもかかわらず、私はあなたのコメントや一般的なオプションを保存できませんでした。 私はスマート取得し、サイトの私の毎週のバックアップを行って行くためのいくつかの方法でそれは良かった。

Patxi !!!!!!!!!!!

2008年2月18日·で掲示されるイベント · 表示のコメント

私は同じをすれば毎日のキャンパスパーティーブラジルとして報告されているどのように多くのブログが、冗長になります。 実際に、私はできなかったためでした、と私は、私がここであなたを教えてあげることができなかった理由です。

今偉大な友人グスタボゴンザレスの呼び出し、以下のBR - linuxのに発表されたが 、私は"休暇中"だったものだったとキャンパスのパーティーで仕事をするボランティアとしてのポジションに応募することを決めた。 私はすでにフリーソフトウェアプロジェクトのためにボランティアが、物理的には初めての出席となります。

私は月曜日にタッチ、電子メールの履歴書(それが技術的なレベルでのボランティアのためだった)、そしてカーニバルで得た、私は火曜日の午後にイビラプエラでビエンナーレ建築物への出席を求めるメールを受け取った。

かつてそこに、私は当社のエンジニアになるPolkan(コロンビア)とパブロとサミラ(スペイン)、に紹介されました。 我々はどこにイベントを知って、そこに次の日になるように配置される。 彼らは約30人のボランティアを待っていた、と数々の2があった。 と私も今偉大な友人、サフラン。

私たちは、翌日までより多くのボランティアを見つけるためにミッションで家に帰りました。 逆にすべての状況のポイントにもかかわらず、私の友人ジェラルドの支持を得た。 それに非常に満足し、私はリオデジャネイロで、幼なじみ、フェルナンドと呼ばれる、と彼は自発的にサンパウロに来るように確信させた。 常にprórpioポケットを支払うために喜んでであるとだけ自発的に来た彼。 それは、dixouは私のガールフレンド、Lucianaと呼ばれることに、私はとても幸せ聖霊を作り、彼女がここに来るために飛行機を取るように確信させた。

灰の水曜日 - 2008年6月2日

私はあなたのバッグを保つ、午前中にジェラルドフェルナンド路を求めると、私たちは近くのpadocaでコーヒーを持っていたし、イビラプエラに行きました。 かつてそこに、ジェームズとパトリシア(勇敢で新しい)と一緒にサフランを見つけ、働くことを行った。 ミッション:ネットワークケーブルの50以上キロ(はい、ネットワークケーブルは50,000メートル!!!).テーブルを保持し、拠出する まだ、最大の課題はエンジニアが望むものを理解することでした。 バベルの謎は、スリーウェイハンドシェイクを介して解決されました:彼らはスペイン語でゆっくり話を、我々はポルトガル語でゆっくり反応し、我々は、ストリップが英語を主張しました。 ケーキのピース!

一日の終わりには空港でLucianaを目指して、我々はすべてのケーブルを逮捕から排出寝た。

木曜日 - 2008年7月2日

Antes da Tempestade より多くの自発的が現れたありません。 私達は6時半のために仕事をしていた。 我々は、ネットワークインフラストラクチャは、時間ころになることを保証するために全力を与えるためにサイレント協定を行いました。 我々は、トリックは前​​日のことを学んだし、ケーブルを保持するためにエンドのための銀行支援のチームを調整してください。 我々は以上の5 000 RJ - 45コネクタをテストします。 この日、我々は時間のトラックを失い始める。 ここから任意のレポートは、タイムラインを破損している可能性があります。 私達に利用できる、3つの動詞だった:仕事、睡眠、食べる。 一日のノートでは、それらの手袋石工を買うのアイデアだった。 彼らは開発者の私達の手を保存 :)

金曜日 - 2008年8月2日

最初の日から私たちは言語が困難ではなく、障害になることを見た。 我々は、より多く与えるよりも重要な、そして/または、注文を受けることを学びました理解することであり、理解すること。

我々は、コネクタをテストし続け、そして一日の終わりに、繊維以上の2000メートルが起動し、慎重に重いとカビ木材の下にチャネルを保護する必要があります。 繊維の半分がリリースされました。 締め切りが近づいていた。 すべての側面の電圧。 我々は失敗することができませんでした。 我々はそれにコミットする。

多くの主張の後、フェルナンドパブロはもちろん、potuñolishの非公式チャットのための私達と離れるように説得!

土曜日 - 2008年9月2日

Ninho de Mafagafos 睡眠4時間の金曜の朝の後に我々は金曜日に打ち上げ繊維の前半を保護するためにチャネルを配置し始めた、そしてそれは多くの困難を与えた。 打ち上げの繊維の残りのための大きな問題は、それを損なう可能性のあるそれは打撲のように、人の動きがあった時に起動されなければならないということでした。 彼女は優しくリリースして保護する必要があった、またはすべての作業が漏洩する可能性があります。 その瞬間は午後遅くに来て、少ない人はPitacoを与えることで、我々は、はるかに迅速に繊維の残りの部分を起動します。 それでも、夜には、起動繊維をvaramos。 匿名の後にバルログ、支出の巣の最初の繊維束を変換し、大幅にイベントの後に同じの除去をスピードアップ、いずれかですべてのものを整理Luciana、のためのポイント。

日曜日 - 2008年10月2日

Jantar テスト、パッチ、設定、およびデバイス。 すべてのものは、どんなに努力を進めてはいけません。 イベントは、翌日開始されます。 我々は太陽がしばらく寝てこのような時間に働く。 我々は、イベント中に我々の仕事のシフトを報告した。 6人は23:00から07:00 PM次の日まで働くだろう。 他のシフトは財団Vanzoliniによって保証される愛情campuseiros、財団が、イベント中に変更[いいえ、私はここでそれを書き込むことは!!!].

スリープ状態にする:我々は念頭に置いて1つの目標を家に帰りました。 そして我々は次の日のためにした唯一のもの。

月曜日 - 2008年11月2日、ビッグデイ

Antes de ser atropelado pela manada de Reporterontes 私達はちょうど正式オープンする前に、イベントに到着した。 私が上で実行されているの名誉を持っていたし、ほとんど文化の私達の大臣に伴う必死Reporterontesの群れによって踏みにじら。 私はサイをより丁寧だったと思う。 それらとは異なり、大臣は、フレンドリーで丁寧だった。 続いする例。

Abertura do Campus PArty Brasil 2008

そこから、我々は夜の仕事とイベントの一日楽しむことを試みた。 スリープ? "!睡眠は弱虫のためです"そして、それは我々の友人にコロンビア人を驚かせた:"ブラジル人は人間ではない!"、彼らの言葉...

伝統的なカバレッジ:

月曜日火曜日水曜日木曜日金曜日

ダウナーズ

登録、食事制限を持っていた人のための代替供給時に約束したが。 私にとっては食べ物は良かったが、ほとんどすべてが肉を持っていたので、多くの菜食主義者は当然不満、および応答でのモック笑顔を受けた。 私が見てきました。 遺憾。 何が最悪なのは食べ物が内側に幸運を充電売却唯一の場所ということです。 参加者はサンドイッチを食べて公園を去ることを余儀なくし、その後、セキュリティのために禁止される。 何が残念!

Sobras de brindes sendo recolhidas, com conteúdo descartado à esquerda トロフィー"今週のメイドが"電気通信の会社に行く、イベントのメインスポンサーは、どのイベントで他のすべての会社とは異なり、プロパガンダの完全なバックパックでボランティアを提示することを拒否した。 最もばかばかしいの言い訳だった。

"ボランティアはバックパックを作成する権利はありません。 バッグは、加入者を支払うためのものです。"

大丈夫、大丈夫、彼らは右、カウントする必要があります? 間違っている。 残った人の多くは、日曜日の午後に集まっていた。 すべてを停止します。 私はその会社の広告だったのネットワークインフラストラクチャの構築を支援する私たち自身のお金を取って、遠くからの友人を持って、ボランティアとして適用。 それから私はトーストを作るためには、"権利"がないことを聞く。 最初私たちはボランティアだった。 我々は喜んでそこに行きました。 いいえチャージなし。 何の見返りも期待せずに。 その後時間オフ、私は私が、私は他の潜在的な顧客は同じ会社のネットワークを使用することを確保するために手助け朝費やしたことを意味し、その企業の潜在的な顧客とバッジは、"テクニカルサポート"と言っていることを事実としてしているスタンド同じ会社のマーケティング資料にアクセスする"権利"? パラドックスのビットがありますか?

ここでのポイントは、私はトーストをする問題ではない。 問題は、彼がイベントで働いていたという理由だけで潜在的な顧客として、私は完全に無視されたということです。 憲法でそれ​​は差別と呼ばれています。 ある意味で彼らはドル以上10.00しないギフトを受け取っていないので、私は空腹ではないので、私は非常によく私を提供するターガスを使用するので、私は、無料で宣伝を作る小さな緑の袋を運ぶに興味を持っています。 ポイントは、この会社は、イベントの主な受益者だったので、私は彼女の自身の利益のための無料のために働くために主に使用されて感じたことです。 これらおよび他のために、私は去年彼のクライアントではなかった、と私は後悔していない。

これは良いです:金曜日、Lucianaの袋を拾うために帰国、土曜日の早い時間に聖霊に返されます。 私たちは、真夜中の後にイビラプエラに到着することになった。 いつものようにゲート3を入力しようとすると、誰でも入力できるようにできない命令を受けたと主張公園、のセキュリティによって阻止された。 彼らは非常に皮肉と無礼である組織を、呼ぶことを拒否した。 詳細:すべての樽が正しく認定し、バッジイベントだった、と多く、動作するようにそこにいた人は、他のすべて(15人)が遠い都市から来たとイベントのテントで眠りに支払われる。 スリープ状態に入ることを禁止される。 眠りに外国人へのエントリがある拒否された。 携帯電話は建物の中にうまく動作しなかったので、我々はトラブルの電話で、組織に話を持っていた。 結果:二時間campuseiroが出てくるし、テーマに興味になるために少女を同行されるまで我々はゲートで禁止された。 彼はすぐに技術支援に走り、私たちのパートナーに警告した。 15分後、誰もが来るように"魔法"の順序があった。 足。 車は、組織(誰が、彼はどのような順序を知っていたという)と話し、そして戻ってくるフリーエントリー、車を送信するために公園の外に停止した。

もう一つの良い:5分間罰金ボランティアは青駐車場のチケットを変更するには遅です。 、男が家を離れる、見てはイビラプエラで自由のために働く喜んで全体ビーズピンクスリップを購入し、無償で操作するための罰金に行き、チケットを更新するために遅れて5分が既に支払われています。 文句を言う権利はありません。 ボランティアの駐車場は権利はない... ...柔らかいですか。

パーティの代替:クラス斧。 真剣に、誰も値するありません! 真夜中に! さらに悪いことに、それは公共のでした! と、両方の2つのパブリックな問題を持っていた...

マッドドッグで画像を取得しないでください。 Lucianaによってそれでした! :(

正のポイント

Radar Saber M60 主要な技術革新は、マイクロソフトでイベントを発表した:5.5Gbpsの帯域幅を使用できる、それが信じられないと前例のないイベントインストールCD MSNにつながる。 今までどのように私はそれなしに住むことができる?

私が参加交渉のレベル(睡眠なし :) 私は信じる)、イベントの焦点と一致していました。

群集のアニメーション。Patxi !!!!!!!!!!!

マッドドッグの存在。

ブラジル陸軍M60を知る私たちの古い友人のレーダーを見る。

マークのブリッジによる講演。 正直なところ、私が今まで見た中で最も素晴らしいの一つ。 彼はあなたが我々の努力の、私達自身の誇りを感じさせる。 唯一の聴覚とユニークなものに国を表すの意味といえば彼の目は輝いて見ることによって。 あなたは言葉で記述することはできません。 それは、数分間スタンディングオベーションにのみ講演を行った。 この経験はお金を支払った者の一人だった。

私は最大のプラスポイントは、さまざまな国の人々との経験を交換する機会を持つことだったと思う。 我々は永遠に滞在する素晴らしい友人をした。 我々は、言語が尊重し、善意限り、障壁にならないことを、とりわけ学びました。 責任、友情と献身は、私たちは通常不可能と思うことを行うことができます。 我々はポルトガル語を話すしなかった、英語を話すことはなかった、スペイン語話せませんでした。 我々は我々の目標を達成するために導いた相乗効果を開発するために十分であるかを話していた。

最も重要なことは、彼らは通常、ネットワークインフラとサポートに対応していないものの、我々は楽しみを持っていたということでした。 さえも2週間はほとんどすべての睡眠場合、サービスで夜を回す。 私たちがキャンパスのパーティーから帰宅をしたことは、金よりも貴重な宝物だった。 お金はそれを支払っていない。

"お願い、しばらく待って"

私は、唯一のポケット辞書で、ポルトガル語を話すことなく、コロンビアから来たグスタボを、言及に失敗することができませんでした。 最初の日、私は手で"辞書を見てと思ったと告白? しかし、これだけでなく、映画の中でですか?"一週間後男はほとんどポルトガル語を流暢に話していた。 私はスペイン語はポルトガル語と似ていますが、ポルトガル人が真実を話していたという作物が付属していません! 彼は達成するために主張した。 注目に値する。 面白いことに、彼に聞いていた"お願い、ちょっと待って"彼は辞書に載っているような単語を検索するというフレーズたびは言った。

フィニッシング

日曜日の14:00後は、すべての機器を離れて取り、繊維を収集する。 元に戻すには、行う方がはるかに簡単です...

我々は社会サンパウロPerlの商人の会合のために私達の外国の友人を取るのに夜になると、その夜ピアス。

私は私達と働いて、成功したキャンパスパーティーブラジルに自分の汗を与えた人全員に感謝を申し上げます。

ラックのいくつかの写真はこれを確認することができますリンクを

QTでの起動、パートII -シグナル、スロットとタイマー

2008年2月1日·で掲示されるC / C + +Qtの · 表示のコメント

この記事では私はQTで初心者のための小さなチュートリアルを作るためにゲームに続く。 今回は私がどのようにあなた自身のシグナルとスロットを作成し、タイマーを処理する方法を紹介します。

ソースコードは、こので見つけることができますリンク

サンプルプログラムは、クラスの使用するタイマーですQTIME 、QTの主要なクラスのいずれかを、そしてあなたのクラスに電卓を使用してスタイルのLCDディスプレイに表示されますQLCDNumberを

QTとタイマ

QTで最も基本的なサポートのタイマーは、メソッドが提供するQObjectのクラスから利用可能です:したstartTime():QObjectをてQObject::KillTimer() 。 最初の方法は、一意のIDを返し、秒のタイマーは、このIDを介してタイマーを終了します。

これを機能させるには、しかしながら、このメカニズムを使用するコードの断片は、"イベントループ"内にある必要があります。 タイマが時間から時間に開始されると(タイムアウト)アプリケーションDispaterですQTimerEventイベントが処理されるまで、プログラムの正常な流れを妨げる、。

タイムアウトの最大値が定義されていない、それは年のタイムアウトでタイマーを作成することが可能である、しかし、最小の時間は、システムによって異なりますができます。 Linuxの2.6.xではではこれは(デフォルトは4 msです)設定可能である一方、Windows Vistaで最小タイマーは10 msです。 QTは、要求に応じて、すべてのイベントを配信しようとしますが、システムはそれがドロップできるようにしない場合は、"余剰を。"

タイマーは、スレッドで使用することもできますが、イベントループの内側であることの条件を尊重しなければならない。 スレッドはいつものように、別の記事に値する...

クラスQTIMEは、一部の機能を有効に、タイマーより高いレベルを実装しています。 一つはsingleShot():QTIME 、一度イベントを発生させる。

豊富なドキュメントと退屈、反復を読んで、しかし私は、あなたがQDorDeCabecaの節約になると信じて...

シグナルとスロットの詳細

シグナルとスロットはオブジェクト、QTのセンターピースの1つとの間の通信に使用されます。 イベントを処理するコールバックを実装するのではなく、このシステムでは、我々は、プログラミングをより直感的、スロットに信号を接続するという概念を使用してください。

シグナルとスロットはによって処理されるクラスメソッドです。 メタオブジェクトコンパイラ(MOC)のソースコードをコンパイルする前に。 彼らは、標準C + +、fazum MOCは、ソースコードを解析するようにして生成されるコンパイルの一部ではない特殊な文があります。

シグナルとスロットを実装する任意のクラスにmocのコマンドを実行して、ソースコードの特定の量が生成されます。 プログラムを使用すること 、qmake 、mocのプログラムへの呼び出しは、プログラマにそれを透明に、Makefileにアップです。

クラスのためにシグナルとスロットを実装することができる、それはへのアクセスが必要メタ-オブジェクトシステムを だから、クラスから継承する必要はQObjectとそのサブクラス、およびマクロ持っている必要がありますQ_OBJECTプライバシーステートメントのそれぞれの地域では。 "スロット[| |保護された秘密公開]"の準備を完了し、標識はセクションおよびスロットでの"信号"で宣言されています

宣言された後のスロットは、その後、他の一般的なメソッドとして定義され、明示的に他と同じように呼び出すことができます。 すでに兆候はもう少しデリケートな、としか宣言し、プログラマが定義されています。 理由は? 構築するための試みの末のメッセージ:

 TMP / moc_mydisplay.o:signalPlay()':関数`MyDisplayで:
 〜/ストップウォッチを/ tmp / moc_mydisplay.cpp:89:`MyDisplayの複数の定義:signalPlay()"
 TMP / mydisplay.o:〜/ストップウォッチ/ mydisplay.cpp:169:まずここで定義されている
 collect2:ldはステータス1で終了を返しました
して:** [スト​​ップウォッチ]エラー1

ファイル内moc_mydisplay.cpp次のコードを生成されます。

  / /信号0
 signalPlay ( ) ボイド MyDisplay:signalPlay()
 {
     activate ( this , & staticMetaObject , 0 , 0 ) ; QMetaObject:: アクティブ (この、&staticMetaObject、0、0);
 } 

はい、MOCは、QTのいわゆるメタメソッドの定義の信号を生成します。 そのため、QTの信号の本体を定義することは違法であり、メソッドをリセットすることでコンパイルエラーが生成されます。 MOCは、あなたのためのシグナルの実装の面倒をみましょう。

接続

それは良いだけに設定、シグナルとスロットありません。 あなたは彼らが相互作用する方法を定義する必要があります。 これを行う方法は、のすべての相続人に存在してconnect()メソッドを介してそれらを接続することでQObjectを このMOCは、シグナルを実装するように、それと同じパラメータを持つ(複数可)スロット(複数可)に接続された(S)への呼び出しの結果への呼び出し。

接続に応じて、信号でもバックと呼ば​​れる最後のスロットと同じ値を返すことができます。 これは非常に安全ではないいくつかのスロットに接続された信号のために、それゆえ、何も名​​前の順序を保証しないことに注意してください。

与えられた信号は、直接第二の信号に接続することができます。 最初の信号)(発する別のメソッドに接続されたコールという結果解脱、第二の最初の呼び出しで、コールの結果を、作成のステップの後などに以来、第二の信号で)(放射するようにして等価である。

接続する方法

シグナルとスロットを接続するために、正しく使用しないとすると、発見することはそれほど難しいバグの原因になる可能性は3つの方法が基本的にあります。 接続のこれらのフォームは、connect()メソッドに追加のパラメータとして渡されます。 彼らは以下のとおりです。

ダイレクト接続 :スロットは、すぐに信号が信号が発行されたスレッドで発行されていると呼ばれています。 これは、スロットへの直接の呼び出しとして動作します。

キュー内の接続 :信号が送信され、スロットへの呼び出しは、QTの内部リストに行く、と信号が呼び出されるかが行われていないに関係なく、スロットの、すぐに返しています。 イベントループは、そのリストを処理し、唯一の後にスロットはオブジェクトがスロットを置かれているスレッド上で呼び出されます。

オートコネクト :これは、接続のタイプを指定しなかったときに使用されるデフォルトのタイプです。 それは、次のいずれかです"悪の種子" 、それは、2つの異なる動作を示します:シグナルとスロットは同じスレッド上に存在する場合、直接接続として機能しますが、そうでないとしてキュー内の接続に動作します。

キュー接続をブロックする :許? わずか3はなかった あなたは矛盾ドキュメント保存:そうですね、これは読んでその記事の利点の一つです! この接続は、信号が正式に実行されるようになるまでスレッドがブロックされているそのシグナルを除いて、キュー内の接続に似ています。 唯一の非常に注意深く使用する必要があることに注意してください、と別のスレッド上のシグナルとスロット。 誤用は、デッドロックを引き起こす可能性があります。 このようなものを見るときあなたが知っているでしょう。

ユーザ@ホスト:。〜/ストップウォッチ$ /ストップウォッチ
 QT:BlockingQueuedConnectionの活性化時に検出デッドロック:送信者が
 MyDisplay(0x8076ac0)である受信QPushButton(0x807e2d8)

何を意味しているのかについての疑問に対処するため、"オブジェクトが存在するスレッド" QT arespeitoスレッドを参照してくださいを。

常にシグナル、スロット、スレッドとタイマーと細心の注意を払って。 これらは、QTの主な特徴ですが、その誤用は見つけることは極めて困難なバグにつながることができます。 それについてのすべてのドキュメントを参照してください。

下のソースに

私たちの例は、2つのクラスとMyDisplayストップウォッチと共通のファイルメインで構成されています。 メインとだけはQApplicationオブジェクトストップウォッチを作成します。 クラスは、ボタンとLCDディスプレイのスタイルとの対話で構成される、プログラムのMyDisplay視覚的部分を処理します。 StopWatchクラスはタイマーを表示して実装するウィジェットを作成します。 このアーキテクチャは、クラスストップウォッチMyDisplayから継承するためにもっと面白い、ほとんどのelegentではないことに注意してください。 しかし、それは事実上、シグナルとスロットを使用する必要がなくなります楽しいひとときを台無しにするだろう。

我々はオブジェクトが外部と通信するときにシグナルとスロットの使用がより明確になります。 一般的に、クラスは外側の何かわからない。 それらの中で外部のオブジェクトへのポインタを渡して、それはカプセル化を痛いとコードが少なく一般的なことができます。 この例では、シグナルとスロットを使用する方が興味深いのは一般性やカプセル化で失われることなく、それのために、オブジェクト(内部ストップウォッチ)/からオブジェクトストップウォッチのレポートイベント(外部Mydisplay)にmyDisplayです。

Qt Designerは(別の記事で私はそれの話をする)の助けを借りて、私は、ダイアログ、ボタンとLCDを作成した。 後は我々の目的に合わせてコードを簡略化。 どのようにmyDisplayはQDialogを継承し、そしてこれは間接的にシグナルとスロットだけでクラス宣言のprivateセクションでQ_OBJECTマクロを追加して使用するために、QObjectから継承されます。 その後、私は他の補助メソッドの中に追加:

  公共スロット:
     long ) ; slotDisplayValue ボイド(ロング);

 プライベートスロット:
     slotPlay ボイド ();
     slotStop ボイド ();

 信号:
     signalPlay ボイド ();
     signalPause ボイド ();
     signalStop ボイド ();
     signalReset ボイド (); 

兆候は、ボタンのクリックに関連する外部のイベントに通信する。 公共の外部タイマティックからの資格がある一方、既に民間のスロットは、前処理の手順を行います。 したがって、クラスは、他の側にあるものを知らなくても、外部に情報を送信し、外部から情報を受け取ります。 古き良きインターフェースの契約。

  公共スロット:
     slotPlay ボイド ();
     slotPause ボイド ();
     slotStop ボイド ();
     slotReset ボイド ();

 プライベートスロット:
     slotTick ボイド ();

 信号:
     long ) ; signalTicks ボイド(ロング); 

アナログと逆にStopWatchクラスは、信号のMyDisplayのクラスを受けるのスロットを実装し、そのスロット公衆に情報を送信する信号を宣言します。

また、カウンタをインクリメント、(私たちの友人がlerdinhos Vistaをフォローできるように!)10ミリ秒ごとに発射されるQTIMEを実装しています。 このカウンターは、表示形式やディスプレイに返送されます。

タイマは、停止、一時停止して適切なボタンをクリックして、いつでも再開することができます。

Finalmentes

例自体は非常にコードではありませんが、それはタイマーとカスタムシグナルとスロットの建設の最も基本的な使用方法を示しています。 非常に特別な注意が、しかし、これらのリソースの使用を含む詳細に与えられるべきである、彼らは致死トラップになることができます。

重要なリンク

シグナルとスロット
QTIME
QTのスレッド
QTのオンラインドキュメント