トップページ⇒linux
706コメント248KB

GTK+プログラミング

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin2007/09/05(水) 13:58:46ID:2SORZMjm
GUIツールキットであるGTK+とその周辺技術についてのスレッド

-前スレ-
http://pc11.2ch.net/test/read.cgi/linux/995808691/

-関連サイト-

本家
http://www.gtk.org/
APIレファレンス
http://library.gnome.org/devel/gtk/stable/
gtkmm(C++ラッパー)
http://www.gtkmm.org/
glade
http://glade.gnome.org/
libglade
http://www.jamesh.id.au/software/libglade/
0334login:Penguin2009/11/09(月) 01:09:23ID:GiNGaxO1
gtkmmの固有事情くわしく

これから始めようと思ってるんだけど
>>132, >>318とか見ると気になる
03353292009/11/09(月) 01:13:18ID:xrkj026G
>>333
Cのほうがやっぱ楽なんですか。
といいつつC++も捨てがたいけど、>>334さんと同じくgtkmmの固有事情が気になります。

JavaやPHPのやつも存在は知ってましたが、CかC++でアプリを作れるようになりたいなぁと思ってて…。
0336login:Penguin2009/11/09(月) 01:49:16ID:9bGbNsmw
>>333, >>334

>>132, >>318の言ってることについては心当たりないが、GtkTreeIterだかのバインディングにメモリリークのバグがあるとかいうブログの記事を見たことがある。
固有事情とは言いすぎた。GObjectの仕組みに加えてC++のオブジェクトとの絡みで素のGTK+より覚えることが多くなるかなと思った故の発言だ。

>>334
C/C++ともほぼ未経験なら日本語ドキュメントや和書もある素のGTK+のほうが理解しやすいのではと思ってC+GTKを勧めたが、単純にGTK+のウイジェットを使ってウィンドウアプリケーションを作るならgtkmmのほうが楽なはずだ。
素のGTK+をCで使用する場合、頻繁に型キャストのマクロを使うし、新たなウィジェットを作成する際にはGObjectの動的型システムを素で使うことになるからその点面倒だ。
gtkmmであればその点いくらか楽ができる。だが、ほかの言語バインディングでも使えるウィジェットを作成するとなると素のGTK+の動的型システムの流儀も触れる必要があるから、C++の知識に加えてGObjectの仕組みも知る必要がでてくる。

Javaをある程度使えて、GObjectの動的型システムには触れずにウィンドウアプリケーションを作りたいということであれば改めてgtkmmのほうを
0337login:Penguin2009/11/09(月) 09:55:18ID:H/aMIY+I
わざわざPerlで扱ってる変態もいるしな
0338login:Penguin2009/11/09(月) 10:14:55ID:LeSNQMah
>>335
俺は Python でやってる。
C を使っている gtk+ プロジェクトだったら C で書く。
そんなに違いはないし、簡単。

Cだとヘッダーにいちいちプロトタイプ宣言しなければならなかったり
毎回コンパイルしなければならないのが面倒だからPython使ってる。
楽チン。
0339login:Penguin2009/11/09(月) 15:19:07ID:dkYv1Xb9
>>337
ぇー最近perlでGTK触りはじめたけど、変態じゃないやい><
0340login:Penguin2009/11/09(月) 15:40:43ID:nWvFWYHF
とにかく完成するのが目的なら自分の好きな言語でいいじゃん。おれはRubyだぜ。
0341login:Penguin2009/11/09(月) 18:21:40ID:EMO5BJHN
GTK+はバインディングが多いのがいいよね
0342login:Penguin2009/11/16(月) 16:13:58ID:VCRzBqJE
なんだかんだ言って、Cのコードは寿命が長いんだよね。
コストベーシスで考えると、GTK+の場合は全てCで書いた方が
いいと思う。他のメジャーなソフトはほとんどCだし、
インテグレーションもし易いよね。
0343login:Penguin2009/11/16(月) 17:18:31ID:gFc8JNPu
Cは初心者向けの本を昔読んで、当時はなんだか難しいなぁって思ったけど、
GTK+に挑戦したくてもう一度読んでみたら大して難しくなかった。

配列、関数、ポインタ、構造体の使い方の基礎がわかってたらGTK+を扱える?
この程度の知識で始めるのはなんか怖くて・・・。
0344login:Penguin2009/11/16(月) 17:21:51ID:VCRzBqJE
GTK+なら、型が決まっているから、
ほんとに基本的な知識だけで十分だと思う。
マクロやプリプロセッサもよく使われているけど、
非常にシンプルなコンセプトだし、問題ないとおもう。
0345login:Penguin2009/11/16(月) 20:35:58ID:gFc8JNPu
>>344
どうも!
今年中に始めよーっと!!
0346login:Penguin2009/11/16(月) 21:19:38ID:tJXAF2DJ
もう「今年中」とかいうセリフが聞かれる時期になったか。
0347犬山ぽち丸2009/11/19(木) 00:11:09ID:CpUTPEU6
Perl でこんな感じのを書いてみました。
ttp://pochimaru.seesaa.net/article/132639898.html

次ページ移動ボタンをクリックする事で次ページを表示したいのですが、
このままでは期待するように動きません。
現時点の表示をクリアして次ページを表示するにはどうしたらいいのでしょうか?
0348login:Penguin2009/11/19(木) 05:10:52ID:kHCd9OdN
# perlって聞いた時点で見る気なくした
0349login:Penguin2009/11/20(金) 14:06:49ID:TNyOV+9k
DrawingAreaをAspectFrameで包むと上下左右に、
GNOMEでは1ピクセル、
Fluxboxでは2ピクセル隙間が開くんだが、なんとかならないものか
03503492009/11/20(金) 14:52:09ID:TNyOV+9k
set_border_width(0)でもだめだった

python-gtk2 2.16.0
python-glade2 2.16.0
gtk 2.18
0351login:Penguin2009/11/21(土) 12:33:26ID:cf2l5sy0
gtk2.18.3をubuntu9.10でやっているんですが
キーを押し続けている状態を知る事はできないんでしょうか?
今はkey-press-eventとkey-release-eventシグナルを使っているんですが
キーを押し続けているとkey-press-eventとkey-release-eventが交互に連続して飛んできて
押し続けている状態を知る事ができません。
0352login:Penguin2009/11/21(土) 15:35:08ID:zEcsEEOn
key-pressのあとにkey-releaseがなければ押し続けていることになる
0353login:Penguin2009/11/22(日) 01:06:56ID:EckaNW4z
>キーを押し続けているとkey-press-eventとkey-release-eventが交互に連続して飛んできて
押しつづけているのにrelease-eventがくるとかキーボードぶっこわれてるんじゃね
0354login:Penguin2009/11/22(日) 08:57:13ID:OlBHF5u9
>>351
Xのレベルではそれが通常の動作(モディファイアキー(の一部)以外では)。
Xはautorepeat時にKeyReleaseと続くKeyPressでタイムスタンプを同一にして
送ってくるので、GDKはそれを利用して>>352のように見せるコードが
一応入ってはいる、が、環境や同時に利用するプログラムといった条件によっては
それが働かないみたい。
自分の環境だけ考えるならGDKの該当部分に手を入れて常にその動作をするように
してしまうのが簡単。そうでないならやはり同様に次のイベント
(gdk_event_peekで得るのかな)とそのタイムスタンプを見て判断するんじゃないかと。
0355login:Penguin2009/11/22(日) 11:40:29ID:xNfLAKy+
>>352
>>353
>>354
レスありがとうございます。
gdk_event_peekはnullが返ってきたのでダメでしたが
gdk_event_getはタイムスタンプ同一のメッセージがしっかり返ってきました。
おかげさまで上手くいけそうです。
0356login:Penguin2009/11/22(日) 22:53:53ID:LzN5AhP5
>>347
こんな感じでどうでしょう?

163a165,168
> my $currentObject = $scrolled_window->child;
> if($currentObject) {
> $currentObject->destroy;
> }
204a210
> $drawable->show;
224a231
>
0357犬山ぽち丸2009/11/26(木) 19:27:51ID:bDLkSh53
>>356
動かしたいように動かす事が出来ました、ありがとうございます。
とても基本的なところで躓いてしまってたみたいで、お恥ずかしい限りです。
0358login:Penguin2009/11/27(金) 20:56:42ID:w3OKtepz
GtkWidget
↑ ↑
GとWが大文字
これに気付くのに4日掛かった
コンパイルが通って空のウィンドウが表示されたときは
雄叫び上げちゃったよ。
0359login:Penguin2009/11/27(金) 21:30:47ID:RzRcFxle
www

とりあえず、なんだ、おめでとう
0360login:Penguin2009/11/27(金) 21:51:12ID:HBGtWPJy
Debianスレで GTK+ でウィンドウ出すのに四日かかったって言ってた人かw
0361login:Penguin2009/11/29(日) 00:46:08ID:guffPLRY
おめでとう、マジで
さぁ早くシグナルをコネクトしまくる作業に戻るんだ
0362login:Penguin2009/12/01(火) 22:14:30ID:sy3qzyYB
>>361
ぬるぽっ!
0363login:Penguin2009/12/01(火) 22:23:34ID:xoJE4V4A
>>362
ガッ
って言ってほしいのね。
もぉ、寂しがり屋さんなんだからぁ。
0364login:Penguin2009/12/05(土) 20:49:17ID:CO55p0ew
なんでこのスレ過疎ってんの?
プログラマー不在のスレなの?
0365login:Penguin2009/12/05(土) 21:08:39ID:Gmpm8vF/
>>364
そう思うならまず率先して何かを作って公開してみては如何でしょうか?
0366login:Penguin2009/12/06(日) 00:50:56ID:fNpRY7Ok
話題がないだけでしょ。
0367login:Penguin2009/12/07(月) 17:19:37ID:CENTWTgC
良くも悪くも枯れてるからな
0368login:Penguin2009/12/07(月) 20:01:28ID:LkAo4E7O
gtk2hsで書いてみたけど思ったより使いやすかった
0369login:Penguin2009/12/13(日) 11:19:39ID:naHBDIjP
gtkで外部装置から受信した温度データをグラフ描画するソフトつくってる。
左3/4が描画領域で残りに現在時刻や表示倍率の設定がある。

連続してデータ受信すると、時刻表示のタイマーがとまったり、倍率設定
のコンボボックスが操作できなくなるので、スレッド分けしようと思うのだけど
expose_eventを別スレッドにすることって可能?
0370login:Penguin2009/12/13(日) 11:42:32ID:P93DdDFa
できそうな気がするけど。
とりあえずやってみたら?
0371login:Penguin2009/12/16(水) 20:46:38ID:laS/Dg3j
>>365
作る気になれるようなことが必要なのではないですか。
0372login:Penguin2009/12/16(水) 20:51:22ID:dPFj9y5E
>>369
すごいですね
勉強のためにぜひソースを見せて頂けないでしょうか?
0373login:Penguin2009/12/16(水) 20:53:19ID:dPFj9y5E
もしくは、ソースリストを公開しているwebページを
ご存知でしたら教えてください。
0374login:Penguin2009/12/16(水) 20:54:06ID:6soPE05o
    ∧__∧
    (´・ω・)   いやどす
    ハ∨/^ヽ
   ノ::[三ノ :.、
   i)、_;|*く;  ノ
     |!: ::.".T~
     ハ、___|
"""~""""""~"""~"""~"
0375login:Penguin2009/12/16(水) 21:47:42ID:c63j0iz9
受信を別スレッドでやるのが普通じゃないの
0376login:Penguin2009/12/16(水) 22:44:30ID:Q8cS+VLW
ブロックする可能性のある処理は別スレッドにしないと止まる
0377login:Penguin2009/12/16(水) 23:39:53ID:jaaomSx0
Exposeを別スレッドって、ぷっ。
さすがLinux。
0378login:Penguin2009/12/17(木) 02:29:15ID:F8Jdsro2
何がおかしいのかよくわからん。
0379login:Penguin2009/12/26(土) 01:54:27ID:XiSC9KS7
GTK+の本を買おうと思うんですけど、この2冊だとどちらがいいですか?
・入門GTK+
・Foundations of GTK+ Development

プログラミングはCの基礎がわかっている程度です。
PHPもやってます。
0380login:Penguin2009/12/26(土) 13:18:25ID:6MLS1ve1
両方買えばいいじゃない。
あと、入門GTK+の方は作者がホームページで
本の内容を公開し始めてる
0381login:Penguin2009/12/26(土) 14:29:39ID:YM2nDrzN
Foundations of GTK+ Development は一部 google books にでてる
03823792009/12/27(日) 00:54:04ID:HfaPMpb7
>>380
両方買うと、結局一冊は読まないままになったりするタイプなので…。
あと、書籍代はケチるべきじゃないと思いますが、深刻な金欠状態なのです。

入門GTK+の作者サイトでの公開について、情報ありがとうございます。
休暇中に目を通してみようと思います。

>>381
Amazon USのレビューで「ネット上で読める」と書いてあったので、どこにあるのか気になってました。
書店になくて立ち読みできなかったので、Google Booksで読んで判断します。

どうもありがとうございました。
0383login:Penguin2009/12/27(日) 08:12:49ID:Ri5kV8GM
GTK+は公式チュートリアルが結構充実している方だと思うので、
それ読めばとりあえずリファレンスとサンプル眺めつつ使えるようになる。

それでも本が欲しくなるならあるウィジェットの使い方を
詳しく書いていて欲しいだとかマルチスレッドとの兼ね合いが
知りたいだとか(あまりいい例が出てこなくてすまん)
求めるものがはっきりしてくると思うので、
それから本を選んでもいいんじゃないだろうか。
03843792009/12/27(日) 20:27:25ID:HfaPMpb7
>>383
公式チュートリアルのことを知りませんでした…。
ダウンロードできたので、スマートフォン等にコピーして移動中でも読めそうです!
プリントアウトして持ち歩くのもいいかもしれません。
最終更新日が2002年10月27日と古いんですけど、問題ないですよね?

書籍を買ったほうが最後まで読みつづけようという意欲が持てる気がしますが、
とりあえず公式チュートリアルを読もうと思います。

ちなみに「Foundations of GTK+ Development」はGoogle Booksで見てみたら
とても良さそうでした。
「入門GTK+」のほうは著者ページで見つからなかったです・・。
0385login:Penguin2009/12/28(月) 02:58:56ID:CtQUEG8Y
> 最終更新日が2002年10月27日と古いんですけど、問題ないですよね?

……?

公式チュートリアルは
http://www.gtk.org/documentation.html でズバリ The Official Tutorial といってる
http://library.gnome.org/devel/gtk-tutorial/stable/
だよ。
GTK+のソースコードのtarball中にも入ってる(docs/tutorial/以下)。
0386login:Penguin2009/12/28(月) 07:38:54ID:RlHoBGgo
>>385
Tutorial Availabilityのページにあるリンク(ftp://ftp.gtk.org/pub/gtk/tutorial)から
ダウンロードしました。
0387login:Penguin2009/12/28(月) 11:47:38ID:T0tfWrHc
自分でいいと思ったならそれ読め。もう知らん。
0388login:Penguin2009/12/28(月) 22:21:50ID:Uh78zlUy
そう言うな。明日になればまたみんな仲良しななしさん
0389login:Penguin2009/12/28(月) 22:55:34ID:AK9LsQvN
>>387 何?どうしたの?
0390login:Penguin2010/01/09(土) 18:48:59ID:khh4I0eb
今日からGTK+を始めてみた
今までwindowsのvisual stdioしか使ったことなかったから、パスさえ通ってりゃ
#g++ hello.cpp
だけでコンパイルをやってくれると思っていた
今日一日かかって`pkg-config --cflags --libs gtk+-2.0`を知って
ウィンドウを出せた
疲れた
0391login:Penguin2010/01/10(日) 13:16:43ID:3oa4ldyN
VisualStudioだってオプションからディレクトリの設定しなきゃ
ビルドすらままならないだろうに、何言ってんだコイツ

ましてやコマンドラインからCL.exe呼び出すんなら、vcvarsall.batなり
vcvarsall.batで設定される環境変数群を、予めユーザー環境変数に定義して
おかなければCL.exeもg++と同じエラー吐いて止まるだろうに・・・
0392login:Penguin2010/01/10(日) 14:58:37ID:zlmG+3hJ
pixmapの背景色を黒くしたキャンバスを作って
その上に画像と文字を描画してて、文字は白

これに対してニコ動のコメント表示/非表示みたいなことをやりたい

文字を描画するときのみXORモードで書いてるんだけど
背景の黒の上に書かれた物は消えるけど、画像の上に書かれた
物は黒抜き去れて残ってしまう

説明わかりにくいかも知れないけど、なんか良い方法無いかな
0393login:Penguin2010/01/13(水) 03:10:04ID:hKXsU3qa
文字を描画しないだけでいいんじゃないの?
0394login:Penguin2010/01/13(水) 13:45:44ID:rT8A3kXe
>>390
チュートリアルとか見てないの?
0395login:Penguin2010/01/14(木) 01:41:29ID:2htHqmwQ
空気の福田はともかく、徳井が苦手でねぇ…
0396login:Penguin2010/01/15(金) 10:31:57ID:2tKD4R7l
GTK+を使って記述されているソフトとしては
gimp以外だとどんなものがありますか?
ソースリストを読んで勉強したいのですが
0397login:Penguin2010/01/15(金) 11:34:43ID:+6ILVUJ5
>>396
http://ja.wikipedia.org/wiki/GTK%2B#GTK.2B2.E3.82.92.E5.88.A9.E7.94.A8.E3.81.97.E3.81.9F.E3.82.BD.E3.83.95.E3.83.88.E3.82.A6.E3.82.A7.E3.82.A2
http://www.gtk.org/screenshots.html
0398login:Penguin2010/01/16(土) 13:06:47ID:st13uJnk
2chブラウザのJDとか、画像ヴューアのgqviewとか。
0399login:Penguin2010/01/23(土) 07:49:03ID:c81zxfOz
ツールバーにウィンドを表示しないようにするにはどうすればいいの?
0400login:Penguin2010/01/26(火) 09:24:59ID:WUy9SOAf
 linux 初心者です。C言語はバリバリです(ウィンドウズで)最近、fedora12 に乗り換え、システムを移植中なんですが、
ウィンドウ関連のところで、GTK+なるものが必要とのこと。そこで、インストールしましたが、
実際のソースコードをコンパイルしてもエラーがでます。
 勉強不足の所をご指摘いただけないでしょうか?

gtk+ インストール
yum -y install gtk+
でインストールしました。 800KBぐらいだったと思います。
そこで、次のコードを emacs でコンパイルします。
#include <gtk/gtk.h>

int main( int argc, char *argv[] )
{
GtkWidget *window;
gtk_init( &argc, &argv[] );
window = gtk_winidow_new( GTK_WINDOW_TOPLEVEL );
gtk_widget_show( window );
gtk_main();

return 0;
}
すると、error : gtk/gtk.h: そのようなファイルやディレクトリはありません。
その他これに関連するエラーがでます。
gtk/gtk.h が無いのか、と思って、
もう一度 gtk+ をインストールしようとすると、
gtk+-1.2.10-69.fc12.i686 はインストール済みか最新バージョンです
何もしません
とでます。
...よろしくお願いします。
0401login:Penguin2010/01/26(火) 11:26:21ID:TXiGdVqu
チュートリアルどおりやれば躓かないとおもうんだけどな
gtk2, gtk2-develを入れて
gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`
0402login:Penguin2010/01/26(火) 16:11:56ID:R1nywYDP
>> 401
 遅くなりましてすいません。返信ありがとうございます。
うまくいきました。
ウィンドウが表示されたとき、感動しました。
でも、emacs からはコンパイルできませんでしたので、リンカーあたりの
設定かな?と思っています。
 何はともあれ、ありがとうございました。
0403login:Penguin2010/01/26(火) 16:57:00ID:R1nywYDP
またまたお願いいたします。
linuxにおいて、
windowsの
SetCursorPos()
GetCursorPos() に相当するものはありますか?
参考リファレンスなど紹介してもらえれば助かります。
0404login:Penguin2010/01/26(火) 17:26:41ID:Up0ueX3p
>>403
ttp://library.gnome.org/devel/gtk-tutorial/stable/
0405login:Penguin2010/01/26(火) 18:04:33ID:R1nywYDP
>>404
 返信ありがとうございます。
...勉強します。
0406login:Penguin2010/01/26(火) 18:11:45ID:OKgnAGh0
>>402
pkg-configコマンドが何なのか調べるんだ。
0407login:Penguin2010/01/28(木) 14:40:04ID:YXchBGq5
はじめまして。GTK初心者です。

困っていることがあります。
gtk_init()でハングするんです。

1. gtk_init()を手動でコール出来るようプログラミングし、rc.localでそのプログラムを起動。
2. xwindow(gnome)ログイン後にgtk_init()をコールさせる。

上記の2の時点でgtk_init()でハングしているらしいです。
(gtk_init()下行のログが出力されない)

原因や対処法をご存知の方いらっしゃいませんか?
0408login:Penguin2010/01/28(木) 18:04:22ID:VFHNmy96
>>407
突っ込みどころが3点ほど。

・rc.localに登録して起動し、さらにログインした後にも起動・・・?

・gtk_init()だけ実行するプログラムを作ったの?
 だとしたら壮大な勘違いをしている。gtk_init()関数が何をする関数なのか調べるんだ。

・「ログ」とは何のログ?ハングしているらしい、では分からないのでソースをUPするんだ。
0409login:Penguin2010/01/28(木) 18:34:10ID:YXchBGq5
>>408
ありがとうございます。すみません、説明不足でした。

ちょっとソースは長いので文書のみで失礼します。

プログラムは、rc.localで起動した時点ではgtk_init()をコールしない作りにしてます。
その後、ログイン後にコンソールから別プログラムを通してプロセス間通信によりコマンドを送信、
そしてコマンドを受信した時点で gtk_init()をコールさせる形にしてました。

ログは、
 printf("call gtk_init\n");
 gtk_init();
 printf("call end\n"); ★
のようにして、★が出力されない感じです。

その後の調査で、どうやら rc.local起動させた場合、環境変数 DISPLAYなどが
全く設定されていないようです。

そこら辺に問題有りかと思っているのですが、なにぶん、勉強不足でして。
時間も無いので質問させて貰った次第です。
0410login:Penguin2010/01/28(木) 18:40:22ID:A3FmJC2O
DISPLAYも何も、Xの起動はrc.localより後なんだぜ?
プログラム分けるんじゃ駄目なんかい
0411login:Penguin2010/01/28(木) 18:44:27ID:0EFvnz24
時間も無いので
時間も無いので
時間も無いので
時間も無いので
時間も無いので
0412login:Penguin2010/01/28(木) 19:24:50ID:bFXQct0B
>>409
「GTK初心者」と言うよりLinux&プログラミング初心者のようですね。

貴方にGTKはまだ早いです。環境変数やXの基本が理解できていないと
説明されても分からないと思いますので出直してきて下さい。
0413login:Penguin2010/01/28(木) 19:30:37ID:uG/wS28i
お金も無いよ
お金も無いよ
お金も無いよ
0414login:Penguin2010/01/28(木) 19:32:04ID:YXchBGq5
>>410
ありがとうございます。
inittabで初期化レベルを分けていることもあり、
てっきりrc.local前に起動処理が走っているかと勘違いしていました。
お恥ずかしい。

>>412
おっしゃるとおりです。
出直してきます。
0415login:Penguin2010/01/28(木) 21:55:00ID:WU2RMXov
>>414
DISPLAYが設定されてなくて、Widget使わないなら、
GObject関係を使うためだけなら、g_type_init ()すれば良いよ。
有名なエラーが出るからgtk_init()使ったってエスパーしてみた。
0416login:Penguin2010/02/07(日) 16:35:02ID:jjKybwb6
書籍「入門GTK+」のP31のプログラムを打ち込み、何度も確認したのですが、どうしても下記のエラーが出てしまいます。
何が間違っているのか、ご教示願います。
gtk-sample.c: In function ‘create_menu’:
gtk-sample.c:64: error: ‘acitons’ undeclared (first use in this function)
gtk-sample.c:64: error: (Each undeclared identifier is reported only once
gtk-sample.c:64: error: for each function it appears in.)

gtk_action_group_add_actionsの値でエラーが出るようです。関係する記述を確認しましたが問題ありません…
0417login:Penguin2010/02/07(日) 17:08:07ID:KhA+E7Mu
エラーメッセージを読んでみましょう
acitonsが宣言されていませんよ
actionsと間違えていませんか?
0418login:Penguin2010/02/07(日) 17:18:05ID:jjKybwb6
>417さん
ごめんなさい、本当に気づきませんでした。エラー文を読んでいたのに…ありがとうございました
0419login:Penguin2010/02/09(火) 01:35:25ID:gRID6Pu9
ググれ秀才
0420login:Penguin2010/02/10(水) 20:29:31ID:y7MwWf/g
gtkmmをこれからやってみようと思ってるけど、
入門GTK+を読みながらC言語で練習するより
最初からgtkmmでC++使ったほうがいい?

gtkmmの入門書がないみたいなので、
取っかかりとして入門GTK+を候補にしてるんだけど…。
0421login:Penguin2010/02/11(木) 13:48:24ID:AIMyey0J
>>420
最終的にC++で書くのが目的なら、↓みたいなところがあるからC++で書けばいいんじゃない。
gtkまわりの日本語の情報が少ないから、言語は違うけどたまに参考にさせてもらってるよ。
http://book.geocities.jp/gtkmm_ja/docs/tutorial/html/index.html
0422login:Penguin2010/02/12(金) 15:44:26ID:DJstgHYM
>>421
そのサイト見てみます。
ありがとう。
0423login:Penguin2010/02/17(水) 19:33:47ID:Ozbv3EUx
GTK+ 1.2 で作った古いツールを 2.0 で動くように手直ししてるんですが、とりあえず Makefile の中で

# GTK+ 1.2
CFLAGS = `gtk-config --cflags`
LIBS = `gtk-config --libs`

# GTK+ 2.0
CFLAGS = `pkg-config --cflags gtk+-2.0` -DGTK_ENABLE_BROKEN -DGTK_WINDOW_DIALOG=GTK_WINDOW_TOPLEVEL
LIBS = `pkg-config --libs gtk+-2.0`

てな感じでお茶を濁して動かしているんですが、ソースを全面的に 2.0 対応するコストって
どれほどでしょうか?
150本ほどのちまちましたツールがあって、2.0 で起こしたツールが2割程度、後の8割は、
前記のとりあえずリビルドです。
0424login:Penguin2010/02/17(水) 19:42:41ID:TkV44uU+
1.2のランタイムぐらい入っててもいんでない?
0425login:Penguin2010/02/21(日) 14:06:19ID:pTXZtDIq
ちょっと自前で描画しようとすると、gdkとcairoが混在していて
煩雑としてるなぁ。
少なくともGDKの描画関連のAPIはもういらないだろう。
3.0辺りでばっさり消すとかしてもいいんじゃないか。
0426login:Penguin2010/03/11(木) 00:46:30ID:Vm2wsjJM
GTK(+glade)を使ったあるプログラムを
・HP-UXサーバ
・RedHat Linuxサーバ
でそれぞれコンパイルおよび動作させ、
別のLinux端末に表示させたところ、
表示や動作自体は問題無いんだけども、
エディットボックスへの入力で
RedHat Linuxの方は日本語入力を受け付けてくれません。
ちなみに、それぞれに入っているGTKはともに1.2です。
SCIMとかの環境は、一見同じっぽいですが・・・・
どこか見るべき箇所はあるでしょうか?

ちなみに、glade自体も
HP-UXは日本語入力を受け付けてLinuxサーバの方は
日本語入力を受け付けてくれません。
gladeの問題なんですかねぇ・・・?
0427login:Penguin2010/03/12(金) 16:52:20ID:sdgtdQtC
Gtk::Dialogの派生クラスを作成してある条件の時表示させています。
表示後一定期間経過したら自動的にそのダイアログを閉じたいのですが、
どうすればいいのでしょうか。
特にダイアログにこだわっているわけではありません。
何かメッセージを表示 -> 一定時間後に自動的に消去
が実現できればいいです。
よろしくお願いします。
0428login:Penguin2010/03/12(金) 19:39:46ID:37m6gC+E
>>427
g_timeout_add関数ではだめでしょうか?
0429login:Penguin2010/03/12(金) 19:41:48ID:WSSuZVVD
>>428
そこはらめぇーーーー
0430login:Penguin2010/03/16(火) 23:40:15ID:u16nCOLZ
gtk_widget_drawを呼ぶとたまにアプリが落ちる
調べたらgtk2では非推奨になってた
かわりにgdk_window_invalidate_rect使えって書いてあったから
それ使うようにしたら、exposeイベントハンドラに入ったり入らなかったりするようになった

0431login:Penguin2010/03/19(金) 03:10:05ID:pTXFbkuH
Xawで作られたソフトのWidgetをGnomeテーマのスキンっぽく
変える方法ってありますか?Xaw3dみたいな
0432login:Penguin2010/03/22(月) 18:34:33ID:gITq0f63
>>427
作ってみた。たぶん、427はここを見てないだろうけど
#include <gtk/gtk.h>

gboolean timeout(gpointer data){
gtk_dialog_response( GTK_DIALOG(data), GTK_RESPONSE_ACCEPT );

return FALSE;
};

int main (int argc, char **argv){
guint tag;
GtkWidget *dialog;

gtk_init (&argc, &argv);

dialog = gtk_dialog_new_with_buttons ("My dialog", NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
tag = g_timeout_add_seconds( 2, timeout, dialog );
gtk_widget_show_all (dialog);

gtk_dialog_run(GTK_DIALOG(dialog));

g_source_remove(tag);

return 0;
}
0433login:Penguin2010/05/01(土) 02:23:02ID:ZoBub0ZC
あるデータファイルをどんどん読んで処理しながら、1秒に1回その途中経過を
Windowに表示する、みたいなプログラムを書こうとしています。

Windowに表示する部分は、gtk_main()を呼ぶ前に、g_timeout_add(1000, draw, NULL)
のようにしてタイムアウト関数を使えばいいとして、データファイルを読み込んで
処理する部分は、どこに書けばいいのでしょうか?
スレッドとかを使わずにやりたいのですが。
■ このスレッドは過去ログ倉庫に格納されています