1 :
login:Penguin :
2001/07/22(日) 22:31 俺の様な厨房プログラマーをある程度使えるようにまで育成して、和製糞ソフトを 大量量産するのが目的のスレッドです。 とりあえずGNOMEプログラミング(小学館)を買ってきました。 これから読んでみます。
1マンセー
1カッケー
1サイコー
やっぱリナックスユーザーって閉鎖的だよな・・・ WinやまだMacのほうがマシだな。 始めてきた正直な感想
1の読書感想独白スレだもん 読み終るの待ってるの
>>1 anjuta付属のエディタのm17nしてください
10 :
1 :2001/07/23(月) 19:38
11 :
login:Penguin :2001/07/23(月) 20:38
12 :
1 :2001/07/23(月) 22:06
>>11 うむ、全く判らん。
だけど、サンクス。
英語は分からんけど、ソースは読めそうだ。
とりあえず、GNOMEプログラミングについてたサンプルをコンパイルしてみる。
./configure
make
make install
でインストール出来たけど、サンプルなんだからインストールなんかしなくてもいいんだがなあ
でも、無事に起動できた!
メニューにツールバーまでついてるYO!
よし、それじゃあ俺はウィンドウだけ表示するのを作ってみるかと
GNOMEプログラミングを読みながら、viでぽちぽち打ち込んで
gcc test.c
するとライブラリが無いぞとエラー
ライブラリなんてどこにあるのか知らないぞ!
GNOMEプログラミングを読み返してみると
gnome-configとかいうツールを使うようだ。
gcc `gnome-config --cflags --libs gnome` test.c -o test
でコンパイルオッケー!
だったらいいんだけど、VERSION、PACKAGEなどの変数が見つからん
とエラー。
んん、GNOMEプログラミングにはそう書いてるんだが、おかしいなーと
>>11 のサイトのソースを読むとVERSION、PACKAGEなんて変数は出てこない。
よーし、
>>11 の方を真似してみるか!
続く
13 :
:2001/07/23(月) 22:06
やっぱりLinuxユーザーは選民思想ばっかだな。
それでWinをつぶそうってか?
英語がわからんよーじゃ使えないOSなんて日本のエンドユーザーに広まる分けないだろ?
だからこーゆースレッドでどーゆーもんかをわかりやすく進めていけば初心者もきてくれるんだ。
それをえらそーな
>>11 みたいな選民野郎がダメにする・・・
1ニッポンイチー
11はエンドユーザーではなくLinuxで開発する場合のことを言っているのでは? 最近はエンドユーザーなら英語が読めなくてもそれなりに使えるけど 開発者としてはまだまだ厳しいと思う。特にGTK開発者は数少ないだろうし。 Linuxは英語が使えないとだめとか、Linuxユーザーは選民思想ばっかとか 決めつけるのが好きだね。
別に英語は読めたほうがいいとは思うが11の下の2行は明らかに蛇足
スレが荒れるから、もうその話は止めた方がいい。 せっかく1がやる気になってるんだから。
GladeでつくるGTK+プログラミング みたいな本の方が簡単なんじゃないの? ってGNOME〜 の方は見てないけど
19 :
9 :2001/07/24(火) 01:08
20 :
11 :2001/07/24(火) 03:50
うーん、叩かれた。
>>11 で
ちょっと言いすぎたかな、すまん。
Linuxプログラミングに関する書籍がまったく手に入らなかった頃、
インターネットでダウンロードした英語のドキュメントに
四苦八苦した経験があるもんだからちょっとぐちっちゃっただけ。
許してちょ。
英語が読めないと苦労するのはLinuxプログラミングに限らないよ。 Windowsプログラミングだって英語が読めないと苦労する。 11 を叩いたり、まして「選民思想」なんて言ってるのはモノを知らないやつらじゃないのか?
意味不明な翻訳より原文というのはあるね。
古い翻訳より原文というのもあるね。
24 :
1 :2001/07/24(火) 22:12
みんな、一緒にやろう!
経験者は低レベルすぎて呆れてるだろうが、こんなのもいいかもYO!
>>12 で問題だったPACKAGE、VERSION変数についてはMakefileから
渡すパラメータのようだ(いまいち不明)
gccで直接コンパイルしていたからダメだったみたい。
で、
#define PACKAGE "test"
#define VERSION "1"
として再度コンパイル。
今度はGTK+の関数が見つからないってエラーが出てきたー(泣)
ライブラリがリンクされていないようだけど、うちのGNOMEが1.2だから
問題なのか?
しかし、サンプルプログラムはちゃんと動いていたからそれはないはず・・・。
これについて延々と悩んだが、gnome-configのオプションgnomeを
gnomeuiに変えて
gcc `gnome-config --cflags --libs gnomeui` test.c -o test
とコンパイルする事で解決!
無事に起動したYO!
自力じゃないけど、俺の初めてのGTK+プログラムが完成!
GNOMEプログラミングを読むと、gnome-configのオプションgnomeui、
gnomeについては詳しく書いてない・・・。
gnomeライブラリを使用しているソースをコンパイルする場合はgnome、
libgnomeuiライブラリを使用しているのをコンパイルするときはgnomeui
を指定するらしい。
わけわかんねー!!
>>18 -19
サンキュ
今度本屋に見に行ってみるよ。
25 :
login:Penguin :2001/07/25(水) 16:03
glibc 2.1とglibc 2.2の共存はできませんか?
26 :
>>1 :2001/07/25(水) 16:12
厨とは思えないほど前向きな上にやる気のある奴だ。みんなのお手本として 頑張ってくれ。応援する。 ただし英語はやっぱ出来るようになろうな。就職してから思い知るよ。 選民意識とか喚いてる奴はそういう負け組だから相手にしちゃだめ。
27 :
login:Penguin :2001/07/25(水) 16:19
やっぱ基礎から攻める? >1 glib -> gdk -> gtk
28 :
9 :2001/07/25(水) 20:57
>>27 手っ取り早くgnomeアプリを組んでみたほうが達成感が高いと思います。
必要に応じてローレベルに降りていくということでよいのでは
29 :
1 :2001/07/25(水) 22:10
>>25 俺にはわかんないけど、どこかのページで共存できるって書いてあったような
気がする。
Vine2.1.5にgaleonを入れようとした時に試してみたけど、俺には無理だった。
>>26 俺はリアル厨房じゃないよ。
社会人だけど心と行動が厨房なんだYO!
やっぱり英語は出来た方がいいよね。
もっと勉強してれば良かった。
>>27 -28
うん、とりあえず何かを作ってみる事にする。
まずはテキストビューアにしよう!
ここにテキストエディタの作り方があるので、それを参考というか
そのまんまぱくって作ってみる事にした。
http://web.kyoto-inet.or.jp/people/jeanne/linux/gtk-prog02.html#editor >>24 で作ったウィンドウを開くプログラムを書き換えてエディタにする
事にしたけど、
/*text ウィジットを作って window 上におく。*/
text = gtk_text_new(NULL,NULL);
gtk_container_add(GTK_CONTAINER(window),text);
この部分を追加してコンパイルして実行するとgtk_textは追加できないぞ、
とエラー表示。
どうやらgtk_window_newとgtk_app_newは同じウィンドウを作る関数でも
中身は違うみたい。
何か部品を追加する時にはgtk_window_newじゃないとダメみたいだ。
そこでgtk_window_newに入れ替えてコンパイル実行すると、
おお、エディタになってる!!
>>11 のサイトでgtk_textを探してみた。
http://developer.gnome.org/doc/API/gtk/gtktext.html gtk_text_insertという関数を使ってみる事にする。
gdk_fontやgdk_colorについては判らないので、NULLにして
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,"test text",9)
としてみた。
ちゃんと表示された!
テキストビューアなので、
gtk_text_set_editable(GTK_TEXT(text),FALSE)
にする。コンパイル実行。
エディットできない。
大成功!
みんなもやろう!
クソスレにつき削除依頼済
>1 きみ頭よさそうなんで大丈夫だとは思うけど、ノイズは無視して頑張ってね。 きみに影響されて、をれも GLUI を勉強することにしました。
32 :
login:Penguin :2001/07/25(水) 23:21
まともなスレをあげます
そーいえばこの板にはギコ猫アプレットを作ってる人もいたな 頑張ってね
34 :
login:Penguin :2001/07/26(木) 01:40
ある程度基礎が分かったら、 あとはgladeでサクサクデス。
35 :
login:Penguin :2001/07/26(木) 11:39
/■\ (´∀`∩ 誰かこないかな?hoge! hoge! (つ ノ (( ( ヽノ )) し(_)
36 :
login:Penguin :2001/07/26(木) 12:40
/ \ (´∀`∩ どうみてもやっぱりhage! hage! (つ ノ (( ( ヽノ )) し(_)
37 :
login:Penguin :2001/07/26(木) 17:47
intiとgtk--はどう違うんだ?
38 :
1 :2001/07/27(金) 00:49
やっとLinuxとWindowsマシン両方同時にネットに繋げられるようになった・・・。 鬱だ氏濃。
39 :
1 :2001/07/27(金) 22:12
出ます なっち( ● ´ ー ` ● )
41 :
login:Penguin :2001/08/09(木) 00:54
QTのがカコイイ
44 :
え :01/10/17 23:05 ID:1zYpbN2Z
gladeで作ったウイジェットのバックグラウンドにピックすマップをはりたのですが だれか教えてくださいお願いします。
45 :
login:Penguin :01/10/20 13:24 ID:OcfV46Zh
LinuxJapanのGTKプログラミングくだらないんですけど。 書いてる人がモロ初心者ってのがまるわかりだね もっと高度な技が知りたいんだがな
自分で習得せい
47 :
エディタ作るよ :01/11/09 17:06 ID:Wh+81om3
随分埋もれているスレですが、本格的にGTKに取り組もうと思うので引きageました。 僕はLinuxを始めてまだ2ヶ月という初心者ですが、あまり良いエディタが無いので cursesを使ってコンソール上で動くものを作っていました。 しかしずっとWindowsを使ってきた自分にはやはりX上で使いたいので、 これからXのプログラミングを勉強したいと思っています。 僕はGNOMEを主に使っているのでGTKでプログラミングをしようと思っています。
48 :
エディタ作るよ :01/11/09 17:14 ID:Wh+81om3
ところがいきなりつまっているんですよねぇ。 日本語変換サーバに接続するにはどうやったらいいのでしょうか? 変換途中の文字列を表示したりする方法がわかりません。どなたか教えて下さい。
49 :
login:Penguin :01/11/09 17:20 ID:sxIsRJw7
50 :
エディタ作るよ :01/11/09 17:30 ID:Wh+81om3
geditは今使っていますが、やはりいろいろ不満があるので自分で作ろうと思うのです。 geditはプラグインで拡張できるみたいですが、それでも限界がありますでしょうし。 僕が最終的に作りたいのは単なるエディタじゃなくて、 プログラミングの総合開発環境なんです。 通常プログラムを組もうとすると、ソースをいくつものファイルに分割しますよね? ところが大規模なものになってくるとたくさんになってわけがわからなくなる。 そこでツリー状に表示して視覚的にファイルの連携が分かるようにしたいのです。 具体的にはVisualStudioのような感じになります。 こうなるとやはり既存のエディタでは対処できないものですから。
51 :
login:Penguin :01/11/09 17:37 ID:AHRgFOVE
52 :
エディタ作ってやる!! :01/11/09 17:40 ID:Wh+81om3
やはりソースコードを読むのがてっとり早いようですね。 参考にさせていただきます。
gtkじゃないけどkylix入れて作った方が早いぞ
54 :
login:Penguin :01/11/09 20:23 ID:x4vrKCqJ
>>50 emacsならそーいう機能もありそうだな。使ってないから知らないが。
55 :
login:Penguin :01/11/10 04:04 ID:d5xkrrlz
>>50 古い雑誌ですが、ISBN4-8222-2305-1
「日経BP パソコンベストムック」1999年4月30日発行
という雑誌に、同じようなことを考えて、
AutomakeのGUIフロントエンドを作成している人がいます。
Makefile.amの内容を調べると、
プロジェクトのディレクトリ階層や、ヘッダファイル、
依存関係が分かるので、それをgtkListでリスト表示するものです。
emacsでMakefile.amの内容を利用するlispを書こうとしている人も
いるようです。どこでみたのか忘れてしまいましたが。
Autotoolでプロジェクト管理するといいのかもしれません。
>>48 普通にやったら変換中の文字列は表示されていると思うが?
とりあえず、一番簡単なソースを書いておく。
from ISBN4-7741-0789-1 P.85より。一部変更。
#include <gtk/gtk.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
GtkWidget *window, *text;
gtk_set_locale ();
gtk_init(&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
text = gtk_text_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER(window), text);
gtk_text_set_editable (GTK_TEXT(text), TRUE);
gtk_widget_show (text);
gtk_widget_show (window);
gtk_main ();
return EXIT_SUCCESS;
}
58 :
login:Penguin :02/01/08 18:57 ID:u+t8IVl0
一時の気ままな情熱? もう冷めちゃったのか? >all 思いコンダラ〜♪ もう一度奮い立て!
Qt&KDEでKDevelop使って作ればいいYO! KDevelopはGtk+も使えちゃったりするらしいが。
60 :
名無しさん@Emacs21 :02/01/09 04:03 ID:1Lr0/gEB
まじめに誰かanjutaのエディタm17nしてくれー。 いちいち間違えたに違いない英語でコメント書くの 疲れた。 成功すればKylixなんか不要になるような... おまえがやれ、ってのはなしだYO!
61 :
login:Penguin :02/01/09 22:23 ID:3VMMyjI/
anjutaは使えるIDEなの?他にIDEはないの?
>>59 Kdevelopって使いやすいの?
Visual Studioとか仕事で使うけど、どうしてもGradeのほうが
使えると思ってしまう。
Visual StudioのLinux版よりGradeのWindows版が欲しいな
そうすればかなり楽できるのに(^.^)
63 :
login:Penguin :02/01/10 00:20 ID:3FZlj9zd
>>62 Gladeのtypoだろ?
漏れはKDevelopの方がスキだけどな。
しかも、Visual Studioはもっとスキだ。
Linux使うようになってからもVisual Studioのコード補完機能だけは譲れずに、
Visual StudioだけのためにWindows起動することもある。
ま、KDevelopはあからさまにVisual Studioのクローンだから
Glade好きには合わないかもな。
KDevelop3.0ではコード補完が実装されるべく、現在奮闘中なのでそれに期待するよ。
>>63 >KDevelop3.0ではコード補完が実装されるべく、現在奮闘中なのでそれに期待するよ。
いいこと聞いた。
それって漏れみたいなLinuxでプログラミング始めようかなって層にはとっつきやすそう
に感じるのだけど。
トーシロも期待して待ってよかですか?
>>64 いいんじゃないの?
漏れも大いに期待してるし。
emacsもいいけど、コード補完ができるのってかなり魅力的だしな。
正直、コード補完さえできればどんなエディタだっていいよ。
ただ、まだ開発段階であんまりうまくいってないみたいよ。
Qtのsignal/slot機構があるから既存のParserではダメらしい。
コード補完ができるようになるのはもう少し先の話かも。
66 :
64 :02/01/10 00:56 ID:fjjH265S
なるほどサンクス。 いろいろ調べてみます。
Visual Studioとはちょっと違いますがanjutaは関数のパラメータ 表示はできます。 あと、EmacsでJDE使えばまあコード補完にほぼいっしょのことは できます。 GNOME使ってるのでKDEのことは知りませんがKDevelopはなんか よさげですなー。
空揚げ
70 :
login:Penguin :02/03/06 19:36 ID:AZIsXcCu
あ
72 :
login:Penguin :02/03/11 00:30 ID:FmLWb+7S
ageわすれ
73 :
login:Penguin :02/03/29 11:10 ID:F0DgSbr9
愛あるage
74 :
神 :02/03/30 07:03 ID:DuAItk01
神の声「うまー」
gtkはデザインがダサいからキライ
>>76 ごめんプログラム板でその単語は注意するべきだった
単に見た目の話(w
低レベルでスマソsage
ちなみに テーマで変更できるのは知ってるけどディフォルトのデザインが ださいしカスタム作るの面倒だから 気にする人あんまり多くないのかもしれないけどね
保守sage
さらに保全sage
g_threadの使い方がわからん。 g_thread_init()は必須ですか? というか、Gtk+でスレッドやるならGlibのスレッドのほうがいいのですか? pthreadですか?教えてください。
82 :
login:Penguin :02/08/08 00:16 ID:VbBFNw1l
gtk で作ったプログラムって Xt の Widget と共存出来ないんでしょうか? Qt には(昔いじった記憶では)Xt の Widget を埋め込むサンプルが確かあったの ですが、gtk は web を探しても見付からないです。 どなたかご存知の方がいらっしゃいましたら教えて下さい。
83 :
82 :02/08/08 00:37 ID:VbBFNw1l
一応mozillaの中に gtkxtbin なるものを発見はしたんですが、 View Source しても殆ど使われていないらしくって使い方が良く分かりませぬ…
system("startx");
C++になれていると、Gtk+の継承はかなりめんどい気がしてくるな。 そもそもCでオブジェクト指向やろうって発想がすごいが・・・ というわけでGtkmmもやり始めたんだけど、どっちがいいのかねえ。
GTKもっとみんなに使ってほしいからageる
継承をする場合(独自のウィジェットを書く場合)、 ウィジェットの構造体はクラスにしても良いようだ。 Gtk+の継承は構造体の最初のフィールドをGtkWidgetにすることにより キャスティングの多用でそれっぽいことができるようになっているが、 これはclass hoge:public GtkWidget と書いてC++による 「本物の」継承をさせてもうまくいくことがわかった。 最初のフィールドが同じなんだから当然といえば当然だが。
オーバーライドはxxx_class_init()のような関数内で行える。 肝心のメンバ関数は次のように書けば良い。 static void xxx_init(GtkXXX *newwidget) { GTK_WIDGET_SET_FLAGS(newwidget, GTK_CAN_FOCUS); newwidget->Init(); }void GtkXXX::Init(){ //ここからインスタンス固有フィールド //わざわざキャスティングしなくてもメンバ変数がそのまま書ける }
Gtkmmは、標準では入ってないディストリがほとんどなので使うのをためらってしまう。 Gtk+のバージョン2も同様。まだ使う気にはなれない。 1.2.xのみでC++のオブジェクト指向がほぼそのまま使えることがわかったため 自分としてはかなり使いたくなってきた。というわけでスレをあげてみた。
OOPやりたいんなら素直にC++使えばいいじゃん。 Cで無理にOOPやろうとするところが解せない。
で、C++ 使うんなら素直に Qt 使えばいいじゃん。 となる罠。
92 :
login:Penguin :02/09/29 22:53 ID:3o1IzYa7
C++は言語仕様がfatすぎてどうも... Cくらいのシンプルさがちょうどいいナリ。 GTKの設計思想はイイとこ突いてると思う。
93 :
スレタイ :02/09/29 23:39 ID:w4WxNaS7
s/GTK/GTK+/
>>92 そっかなぁ?
GTK+みたいにでかくなるとCではちょっと持て余し気味じゃない?
Qtはかなりスマートだと思うけど。
Qtは、mocを使うのがイマイチ気に入らん。 GTK+は日付バージョンの時代から使ってるのでなんとなく今も使ってる。
ruby/gtkでバイナリまで作れたらいいのに…
99 :
login:Penguin :02/11/11 20:56 ID:gMGsLKZV
GTK+もあまり使われてないんですかね・・・
GCode の名前がIntiに変わった模様。 しっかし gtkmm とどっちを使うべきか迷うよな。 こーゆーあんま違わない分岐は正直困る。 全然違うんなら「選択出来て良い」と言えなくもないけどさぁ。
>>95 moc が嫌いっていうけど、じゃあ libsigc はいいの?
ここ、あんまり人が来ないみたいだから…。 とりあえず、自分用のメモ。 Gtk+プログラムをコンパイル/リンクするためには。 gcc `gtk-config --cflags` -c file名 ←コンパイル gcc `gtk-config --libs` file名 ←リンク
Imlibを使用した場合のコンパイル/リンク方法 gcc `imlib-config --cflags` -c file名 ←コンパイル gcc `imlib-config --libs` file名 ←リンク
gtk-2.0 以降だったら pkg-config にしる!
>106 thx! ここ、見ている方がいるんですね。 >104 はgtk-1.xに摘要っと。 gtk-2.0 以降だったら gcc `pkg-config --cflags gtk+-2.0` -c file名 ←コンパイル gcc `pkg-config --libs gtk+-2.0` file名 ←リンク
>108 thx! >107の続き [1] makeファイルとは Makefileというのは、ソースファイルから実行可能ファイルを 作成する手順を記述したものです。実際に、ソースファイルか ら実行可能ファイルを作成するためにはmakeコマンド(MS社 のコンパイラ系ではnmakeコマンド)を実行します。
>109の続き コマンドの実行によって、オブジェクトファイルとソースファ イルの比較が行われます。もし、ソースファイルの方が新しけ ればコンパイルが行われます。そうでなければ、何もしません。 makeファイルを作成する事により、ソースファイルと実行 可能ファイルの関係および保守・管理を容易にすることができ るようになります。 コマンドの形式は make −f makeファイル名 となります。ただし、makeファイルの名前がmakefileであ るときは、上記コマンドの−f以下は省略可能です。
GTK+ Programming するなら automake、autoconf 使いましょう!!
簡単な使い方の説明がたしか Larse さんのところ(
>>108 参照)にあったよね?
>>113 > GTK+ Programming するなら automake、autoconf 使いましょう!!
最近バージョンアップが激しいので、できればam-1.5 ac-2.13を使いませう。
今日、ac-2.57 am-1.7.2まであがりますた。ほとんどの.m4ファイルが
撃沈されますた。
automakeとかautoconfとか、書式がちょっと変態的だと思う。いや、使ってるけどさ。
>>115 確かに、confgure.in(ac)のマクロとシェルスクリプトの混在状態は
変態的だね。Makefile.amはまだマトモだけどさ。
自分でhoge.m4を作っておいてconfigure.inはほとんどマクロだけに
するとかしたほうがいいのかな?何とかすっきりさせたいんだけどね。
UNIX板のすれは死んでいる状態だけど、やっぱりすれ違いかな?
>116 bin_PROGRAMS=hoge hoge_SOURCES= main.c みたいなMakefile.amの書き方も俺は気持ち悪いと思うんだけど、そこらへん はどう思う? なんで区切が_なんだよ。未だになじめない。 そろそろスレ違いっぽくなってきてるような気がするので最後にGTK情報を。 GTK+ 2.1.3がリリースされてる。
118 :
冗談だよ :02/12/06 23:20 ID:5wmq/hiL
>>117 > なんで区切が_なんだよ。未だになじめない。
GTK+の関数やマクロは、ほとんど _ がデリミタになっているから気にしない。
>>118 GTK+の関数とかは、向こうが用意してくれてるじゃん。自分が定義したhogeが
hoge_SOURCESみたいな感じで_でつながってる!って感じがなんか気持ちわるい
んだ。
そう、俺の中では_は完全に区切ってる感じじゃなくて、区切りつつもつなが
ってる感じなんよ。ここらへんの感覚は、やっぱり人によって違うんだろうなぁ。
名前のところを見て欲しいが、、、
>>119 確かに SOURCES プライマリは気に入らないですね。
それ以外はインストールされるディレクトリ名と割り切ってしまえば、
そんなでもないですけど。
# 他にも例外あったっけ?
>>120 とりあえず、hoge_LDADDってのがあるね。hoge_LDADD = @GTK_LIBS@みたい
な感じで使う。
まぁ、定型的に使う分には、割切ってしまえばそんなに気にはならないと
いえば、そうなんですけどね。
122 :
120 :02/12/07 10:07 ID:Of8FLFRv
ということでまとめ、am-1.7環境でMakefile.amで変態的なプライマリは、 SOURCES AR LIBADD LDADD LDFLAGS LINK CCASFLAGS CFLAGS CPPFLAGS CXXFLAGS FFLAGS GCJFLAGS LFAGS OBJCFLAGS RFLAGS YFLAGS DEPENDENCIES SHORTNAME に決定されました。結構いっぱいありますね。
120さん乙ー
124 :
login:Penguin :02/12/10 17:16 ID:m9e/PYr1
良スレage
GTK+2.2 リリースage。 ところで、みなさんはGTK+1.2とGTK+2.x、どっちを使ってますか?またその理由は? ちなみに俺はGTK+2.xの方を使ってます。1.2より速いし、immoduleとか アンチエイリアスとか、いろいろ新機能があるから。
126 :
名無しさん@Emacs :02/12/23 19:54 ID:Mt+k38km
僕もGTK+2.xですね。 とりあえず新しいの使っておこうって感じです。
いまだ1.2.xのまま。 自分でつくったやつが動くのかどうか検証するのがめんどい。 # そんなことじゃだめなんだけどなー。
オレも1.2.xのまま。 特に、理由はないです。Gtk+2.xに変えてもいいけど…。 イマ、ちょっと忙しいんで、年明けにでも…。
保守
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
さて、そろそろ読むべきレスがなくなって 記念カキコで1000目指す頃合ですか。
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
90 名前:心得をよく読みましょう 本日のレス 投稿日:03/01/08 17:30 Xc+fqEec
>1
>どうやら管理人
>qbサーバ
ってなんですか?
97 名前:●ITAN.IBM ◆GQITAN.IBM 本日のレス 投稿日:03/01/08 17:31 A4oVmFaH
>>90 批判要望、削除議論、削除整理、削除要請
98 名前:心得をよく読みましょう 本日のレス 投稿日:03/01/08 17:31 TzeruebF
>>90 qb.2ch.netで始まるアドレスの鯖。
とありましたな。スマソ
他の鯖はIPとってないの?
137 :
山崎渉 :03/01/15 11:29 ID:wo7m90to
(^^)
138 :
質問君 :03/01/17 21:51 ID:Gw5Q2kTa
お力をお貸し下さい! gtk_timeout_addで画面の再描画を設定しています. しかし,別の関数内でwhile(1)の無限ループを使うと,画面の再描画ができません. どうしても無限ループが必要なのですが,どのようにすればよいのでしょう? お力をお貸し下さい!
139 :
山崎歩 :03/01/17 22:20 ID:tQv9kuDJ
>>138 おまえが永遠にソースを書き続ければよろしい。
>>138 あなたの望むそのものズバリの解答ではないかもしれないけど、
while( g_main_iteration(FALSE) )
/* do nothing */;
で強制的にメインループを回せます。
よって再描画が必要なときはただちに行われます。
参考までに。
142 :
login:Penguin :03/01/22 11:49 ID:VGBhRJXh
Gtkmmの参考書って出てないんですか?
Gtkmmを使いたいなら、まずただのGtkをやること。 オブジェクト指向の知識があれば、すぐ移行できる。
Gtk2で開発している人はあまりいないのかな? 自分が思うに、Gtkは1.2.xでも相当洗練されていて、十分な機能を備えているんじゃないだろうか。
>>144 Pango だけでも十分 1.2.x から 2.x に移行する動機付けには十分過ぎると思うんだけどなぁ。
2.1 からは Xft2/fontconfig 対応で OpenType フォントも使えるようになったし。
あと、個人的に Gtk+ 1.2の GtkPaned Widget は大キライ。仕切りの下にあんなつまみつけた
センスが分からん。
146 :
login:Penguin :03/03/06 12:49 ID:ucaHnoqM
scheme で gtk やりたいぞ age. 和製糞ソフト作るようなヤツでもわかる日本語ドキュメント見せろ,または書け. guile-gtk 希望. え?w3m cgi? GUI じゃないだろ?便利だけど.
147 :
login:Penguin :03/03/06 13:53 ID:fSTp04vi
148 :
146 :03/03/07 12:46 ID:5F6JJ4cf
>>147 Gauche-gtk に同梱されている gtk-tutorial の hello, world! か.
でもこれだけじゃあ和製糞ソフトが量産されるとは思えないな.
gtk2 って何?
まだ 1.2 使ってるんだけど,これから gtk プログラムを作るなら 2.x の方がいいの?
多国語の扱いがマシになったとか書いてあるところがあったけど.
簡単な方を教えてクレクレ はぁと.
1ユーザとしては アンチエイリアシングで、表示が綺麗なgtk2を使って欲しい、、
150 :
山崎渉 :03/03/13 16:51 ID:52vAtNh8
(^^)
151 :
login:Penguin :03/03/18 10:45 ID:FeF5+SYV
gtk ver 1.2を使っているが、どうすればwidgetの中味を強制的に再描画させら れる?計算結果をすぐに反映したい時など、ウィンドウ操作によって expose_eventが発生するのを待たずに再描画したいケースが有るはず。例えば ボタンをクリックした時にGtkDrawingAreaオブジェクトを再描画させるとすると GtkDrawingArea* area; int main(int argc, char** argv) { (中略) // GtkDrawingAreaオブジェクトを作成 area = gtk_drawing_area_new(): // expose_eventのコールバック関数を指定 gtk_signal_connect(GTK_OBJECT(drawingarea1), "expose_event", GTK_SIGNAL_FUNC(on_drawingarea1_expose_event), NULL); // GtkButtonオブジェクトを作成 GtkButton* button = gtk_button_new_with_label("Draw now"); // clickedイベントのコールバック関数を指定 gtk_signal_connect(GTK_WIDGET(button), "clicked", GTK_SIGNAL_FUNC(click_event_handler)); (略) } (続く)
152 :
login:Penguin :03/03/18 10:45 ID:FeF5+SYV
(続き) // drawing areaの中味を描画する gboolean expose_event_handler(GtkWidget* widget, GdkEventExpose* event, gpointer arg) { GdkWindow* window; GdkGC* gc = gdk_gc_new(window = event->window); // グラフィックコンテクストを取得する // 描画コード gdk_gc_unref(gc); return FALSE; } // ボタンがクリックされた時の処理 void click_event_handler(GtkWidget* widget, gpointer arg) { gboolean return_val; // areaの再描画を要求 困ったのはここから。click_event_handlerの中でareaに対してexpose_eventを発行すれば再描画されると踏んだが、関数 gtk_signal_emit_by_name()の呼び出しで第3引数以下にどんなパラメー タを渡せば良いのやら(続く)。
153 :
login:Penguin :03/03/18 10:48 ID:FeF5+SYV
(続き) 以下は今までに洩れが試したこと 1.expose_event_handlerにargだけを渡す gtk_signal_emit_by_name( GTK_OBJECT(area), // areaに対して "expose_event", // expose_eventを発行する NULL, // expose_event_handlerの第3引数argに渡す値 &return_val); // expose_event_handlerの戻り値を格納する変数へのポインタ コールバック関数expose_event_handlerは第2引数にGdkEventExpose*を 取るが、ここでexpose_eventを発行すると指定している以上、 GdkEventExpose*は自動的に渡されると予想して第2引数eventに渡す値は 指定しなかった。結果はこのコードを実行するとsegmentation faultが 発生して失敗。 2.GdkEventExposeオブジェクトを生成する GdkEvent* event = gdk_event_new(GDK_EXPOSE); // GdkEventExposeオブジェクトを生成する gtk_signal_emit_by_name( GTK_OBJECT(area), // areaに対して "expose_event", // expose_eventを発行する event, // expose_event_handlerの第2引数eventに渡す値 NULL, // expose_event_handlerの第3引数argに渡す値 &return_val); // expose_event_handlerの戻り値を格納する変数へのポインタ gdk_event_free(event); // eventに割り当てられていたリソースを解放する 結果はgdk_event_newがundefined referenceとなってコンパイル不能。 誰か手がかりをキボンヌ。
>153 ウィジェットを再表示するだけなら単に gtk_widget_draw() 使えば いいんじゃないのかな。
155 :
151-153 :03/03/18 12:53 ID:FeF5+SYV
>>154 サンクス。ついでにgtk_widget_で始まる関数の一覧表調べたら今ではgtk_widget_queue_drawを使うことを推奨しているみたいだね。おまけに、描画
領域を背景色で塗り潰す方法も発見。結局上記のコードはこうなった。
// drawing areaの中味を描画する
gboolean expose_event_handler(GtkWidget* widget, GdkEventExpose* event, gpointer arg)
{
GdkWindow* window;
GdkGC* gc = gdk_gc_new(window = event->window); // グラフィックコンテクストを取得する
gdk_window_clear(window); // 背景色で塗り潰す
// 描画コード
gdk_gc_unref(gc);
return FALSE;
}
// ボタンがクリックされた時の処理
void click_event_handler(GtkWidget* widget, gpointer arg)
{
gtk_widget_queue_draw(GTK_WIDGET(area));
}
156 :
login:Penguin :03/03/22 23:09 ID:XBKip/9C
GTKアプリを、Xの起動時に立ち上げると、 日本語が一部消えるんだけど・・・。 なぜ?
157 :
相互リンク :03/04/14 14:01 ID:nee9/l5h
158 :
login:Penguin :03/04/14 20:31 ID:Rvr2v4eQ
>>156 化けるんじゃなくて?
化けるのはAAを掛けてるライブラリのせいなのでAAを切るとよいかも。
159 :
156 :03/04/14 22:58 ID:Y/KrP1DD
>158 化けてはいません。 なんか、X起動直後に、初めて描画したときだけWidget単位で消えます。(ちゃんと出るのもある) でも、『あああaaaあああ』みたいのだと『 aaa 』ってアルファベットだけ出る。 しかも、最小化とかすると、元に戻したときちゃんと出る。 上の別のウィンドウを重ねたりしても。 今は仕方ないから、プログラム中でxrefreshを呼び出して、むりやり再描画してるけど。 タイムアウトでの割り込みをかけたりしてるから、美しくないんだよな。
160 :
login:Penguin :03/04/16 18:42 ID:p/eHtb4s
Gtk2(というかGdk/Pango)で、文字を任意の深さのPixmapに (実際表示されているウィンドゥの深さ,Visualとは切り離して) 描画できる方法はないですか? いったん描画したあとでgdk_drawable_get_imageで取り込み プログラム内部で利用しようと考えています。 内部で使用するため、ハードにかかわらず一定の深さの データがいいわけで、表示しているWindowとは無関係のPixmapに 描画できる方法をさがしています。 ただ単にPixmapを作成してgdk_draw_layout_with_colorsで 描画すると、カラーマップの設定が必要と怒られます。 カラーマップを設定しようとしたのですが、そのためには Visual構造体を設定することが必要です。 自分で勝手に値を設定してそれをgdk_colormap_newに渡すと 落ちてしまうようですし...なんか方法はあるのでしょうか
161 :
160 :03/04/16 18:48 ID:p/eHtb4s
pixmap=gdk_pixmap_new(drawable,xsize,ysize); visual.type=GDK_VISUAL_STATIC_GRAY; visual.depth=1; visual.colormap_size=1; visual.bits_per_rgb=1; visual.red_mask=1; visual.red_shift=1; visual.red_prec=1; visual.green_mask=2; visual.green_shift=2; visual.green_prec=1; visual.blue_mask=4; visual.blue_shift=3; visual.blue_prec=1; colmap2=gdk_colormap_new(&visual,TRUE); ←ここで落ちる gdk_drawable_set_colormap(pixmap,colmap2); pangocontext=gtk_widget_get_pango_context(widget); pangolayout=pango_layout_new(pangocontext); pangofontdesc=pango_font_description_new(); pango_font_description_set_family(pangofontdesc,"monospace"); pango_layout_set_font_description(pangolayout,pangofontdesc); pango_layout_set_text(pangolayout,"TEST",4); gdk_draw_layout_with_colors(pixmap,gc,0,0,pangolayout,gdkcol,NULL); getimg=gdk_drawable_get_image(pixmap,0,0,xsize,ysize); /* getimg->mem の内容をプログラムで使用する */
162 :
160 :03/04/16 18:53 ID:p/eHtb4s
大切なとこ間違えてたスマソ × pixmap=gdk_pixmap_new(drawable,xsize,ysize); ○ pixmap=gdk_pixmap_new(drawable,xsize,ysize,8); /*深さ固定*/
163 :
login:Penguin :03/04/16 20:10 ID:lo8mJ2VY
gtk2ってUTF8で渡さないと文字書いてくれないですよね。 で教えて欲しいのですが、EUC-JPからUTF8に変換するには 普通 iconv を使うものなのですか? それとも mbstowcs とかでもOK? とりあえず今は iconv 使って表示できてるけどムダなのかな。
mbstowcs は wchar_t が UTF-8 であることを仮定しちゃうことになるので 使っちゃだめ。 iconv() の wrapper である g_iconv 系の関数か、g_locale_to_utf8() を使う。 前者は変換元の文字コードを明示的に指定したい場合。 後者は「locale の文字コード」から変換したい時。gconvert.h を参照のこと。
165 :
160 :03/04/17 01:22 ID:LaltSFnA
PangoとXftを組み合わせればなんとかなりそうという気がしたが ...どうやって使うのだろうか XCreatePixmapでPixmap作成(Xは使いたくなかったが...) XftDrawCreateAlphaでXftDraw作成 XftDrawColormapでカラーマップ作成 pango_xft_get_font_mapでPangoFontMap作成 pango_font_description_newでPangoFontDescription作成、必要な値をセット pango_font_map_load_fontでフォント読み込み script_engine_listでpangoエンジンIDを取得←このあたりよくわからん script_engine_loadでロード PangoEngineShape(←これはどうやって取得するのか...)で 文字列からPangoGlyphStringに変換 pango_xft_renderで文字列描画 XGetSubImageでイメージ取得、でいいのかな?
166 :
山崎渉 :03/04/17 11:49 ID:KRn99/cy
(^^)
保全age
168 :
山崎渉 :03/04/20 05:47 ID:X64WTq1+
∧_∧ ( ^^ )< ぬるぽ(^^)
>>164 > mbstowcs は wchar_t が UTF-8 であることを仮定しちゃうことになるので
> 使っちゃだめ。
どんなlibcをつかってんだ(w
UTF-8っつーのは最大6byteのマルチバイトなcharacter encoding schemeだそ。
union wchar_t{
uint64_t wc;
char utf8[8]; /* 先頭2byteおまけ */
} wchar_t;
みたいな実装にはお目にかかったことが無いけど?
# wchar_tがUCS2だったりUCS4だったりする実装は山ほど在るが。
>>163 に答えるなら、内部エンコードを仮定云々は関係なしに
「mb/wcはコード変換機能ではない」だろうよ。
170 :
160 :03/04/22 23:43 ID:N17I9atm
(pangoを使って配列に文字描画結果を格納する) gdk-pixbufを使って解決しますた ウィンドゥと同じ深さのpixmapを用意して そこに文字を描画して gdk-pixbufにとりこむ gdk-pixbufはハードにかかわらずRGB24bitで操作できる pixmap=gdk_pixmap_new(window,xsize,ysize,-1); pixbuf=gdk_pixbuf_new(GDK_COLORSPACE_RGB,TRUE,8,xsize,ysize); pangocontext=gtk_widget_get_pango_context(widget); pangolayout=pango_layout_new(pangocontext); pangofontdesc=pango_font_description_new(); pango_font_description_set_family(pangofontdesc,"monospace"); pango_layout_set_font_description(pangolayout,pangofontdesc); pango_layout_set_text(pangolayout,"TEST",4); gdk_draw_layout_with_colors(pixmap,gc,0,0,pangolayout,gdkcol,NULL); gdk_pixbuf_get_from_drawable(pixbuf,pixmap,NULL,0,0,xsize,ysize);
171 :
160 :03/04/22 23:49 ID:N17I9atm
↑これで配列に取り込まれるので gchar *pos; pos=gdk_pixbuf_get_pixels(pixbuf)+x*4+y*gdk_pixbuf_get_rowstride(pixbuf); で、R:pos[0], G:pos[1], B:pos[2], A:pos[3]で(x,y)の値が取得可能。 XmbDrawStringとXGetSubImageでもできないことはないが、pangoに こだわったのは、(プログラム操作する側をふくめて)フォントの 扱いが簡単になり、統一がとれるため。 ただ、アンチエイリアスフォントはこの方法できれいにとれるが 2値(ビットマップ)にしたいばあいがきれいにとれない....
172 :
164 :03/04/26 03:02 ID:d+JpEtZU
>>169 あ、UCS4 だ。UTF-8 じゃねぇや..ボケてた。
>「mb/wcはコード変換機能ではない」だろうよ。
が言いたかったことです。wchar_t の実装がどうなってるかを
仮定するな、ってことで。
173 :
login:Penguin :03/04/29 04:55 ID:TV50G8uM
Gtk でスプラインとかベジェとか、曲線を描きたいのですが、サンプルとか無い でしょうか。Gtk 単体では難しそうなので、他のライブラリも必要かなと思うの ですが。作りたいのは Flash みたいな Vector Animation です。
>>175 gyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
178 :
login:Penguin :03/04/29 22:35 ID:/4ZC/4OS
>175 ワラタ、腹筋硬直するぐらい
参った・・・
181 :
login:Penguin :03/04/29 22:40 ID:OyAr9ioi
>174-175 ありがとうございます。 guppi や gtkextra も見てみましたが、GtkGLExt で OpenGL を使ってみようかな と考えています。
>180 svgでここまで書かれると凄いものがあるな
>>173 使ったことはないのだが、GNOMEならlibartを使うのが王道っぽい。
gyk+インスコ難い
>183 これかなり良いですね。ちょっと試してみます。ありがとうございました。
ほー、levien さんって GhostScript のメンテナーさんなんだ。なるへそ。 libart って gnome 無くても使えるみたいだね。fresco にも使われてる。
>>164 wchar_tをUnicodeと見なすのは悪だというのは、ダメハッカーの寝言。
このアプリではwchar_tはUnicodeに限定すると、宣言すればいいだけのこと。
どうせ、g_locale_to_utf8()も内部ではmbstowcs()呼んでるよ。
まあ、その場合でもglibの関数を使うべきだが、それはUTF-8仮定とか
が理由ではない。
>>173 ベジエなんて自分で書けるだろ。ほれ。
double x = (1-t)*(1-t)*p0.x + 2*t*(1-t)*p1.x + t*t*p2.x;
double y = (1-t)*(1-t)*p0.y + 2*t*(1-t)*p1.y + t*t*p2.y;
0<=t<=1な。
>>183 の言うとおり、libartでもベジエをドローできる。
libartだとアンチエイリアスの機能もあるのでありがたくはある。
>>187 ソース読めない香具師ハケーン
glibは文字コード変換はiconvでやってますが何か?
g_convert_to_utf8 -> g_convert -> g_covert_with_iconv -> g_iconv -> iconv
MS-Win32のバヤイMultiByteToWideCharを使ってるがこいつは非POSIX関数だしな。
変換結果がUCS2(プッ16bitかよ)だと保証がある。
一旦MBCSからUCS2に変換して自前でUCS2->utf8変換書いた方が楽かもしれん。
あんまり褒められたコードとは思えんがな。
ちなみにSUSv4ではwchar_t is opaque objectと書いてありますが何か?
__UNICODE__とか__MBCS__とか__、C99の__STDC_ISO10646__を宣言するのは勝手だが、
MS-Win32のMSBC用バイナリ for Win9x/Me とUNICODE用バイナリ for NT/2k/XP のように
互換性の無いものになる & サポートしないplatformがあることは覚悟しとけ。
189 :
188 :03/05/01 16:27 ID:N64qTJQU
補足、Win32の場合__UNICODE__と__MBCS__で リンクされる関数が別になるだけまだまし。 __STDC_ISO10646__の場合は同一インタフェースになるからな。 どこでブっ壊れるか判ったもんじゃない。 まあNetBSDのsys/cdefs.h内の__RENAMEマクロのような仕組みを使うとか ldに細工するとかで、別シンボルを呼び分ける仕組みがlibcに用意されれば Win32並に安全にはなる。
190 :
山崎渉 :03/05/22 02:04 ID:p4opmoqv
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
191 :
login:Penguin :03/06/01 21:11 ID:Mv7aj8Tw
Ruby-Gtk+-2には、Ruby-GTK+-1.2のときにあったCListは無いよね? CListと同じことを別の方法でするには、なんかいい方法ありますか?
192 :
動画直リン :03/06/01 21:13 ID:+qVihZQ+
193 :
160 :03/06/01 22:02 ID:JkScEVpY
>>191 Gtk2ではCListのかわりに
GtkTreeViewを使うことになっている。
C言語での話になるが、GtkListStoreをつくってそのなかに
表のデータをほうりこんでやり、
別にGtkTreeViewヴィジェットを作成して
gtk_tree_view_column_new_with_attributesで表示上の列と
データ上の列を対応づけ(アトリビュートの"text"に何列目の値を
表示するかを指定する)
gtk_tree_view_set_modelで、先に用意したGtkTreeViewrと
GtkListStoreを対応づける
おそらくRuby-Gtkでも同じようにできると思われ
で、何作るの? 何つかってもそれは個人の自由だから良いが 目的があるのと無いのでは習得速度に雲泥の差がある。 最低限のライブラリの使い方を覚えたらさっさgladeでも使って 組んだ方が良いよ。 目的が無いとすぐ飽きるし飽きると忘れる、結局無駄な時間を過ごした事になる。 ある程度長い時間使ってないとモノにならない。 見た目にしろlibgtk自体いしろ結局”ガワ”でしかないのだから ちゃんと日本語化されてるなら後は中身に心血を注ごう。 cだからめんどくさそうとか言う奴はgtk,gdk,glibのチュートリアルをだいたい どんな事ができるかざっと眺める位にして後はgladeつかえ。
195 :
191 :03/06/02 20:31 ID:H7/+JInF
>>193 =160
Ruby-GNOME2のソースについてたサンプルに、GtkTreeViewもありました。
どうやら、説明してくれた通りのようです。
ありがとうございました
>>194 MPlayerのフロントエンドを作ろうかと...
飽きないように、まったり作ろうと思ってます。
glade使ってますよ。便利ですね、あれは。
頭の中でゴチャゴチャ考えるのがいかに非効率的かわかります(^^;
>>195 mplayerのフロントエンドなら2つ3つあるみたいだけどそれとどういう差別化をす
んの?
俺としてはフロントエンドによる速度低下を使い勝手が上回るような奴を希望。
GTKで何か作りたいけどWinみたいにGUI主体じゃないから 作りたいものがない・・・ こういうツールが欲しいとかなんかないですか?
199 :
197 :03/06/08 17:11 ID:h1K8ATYr
家計簿ですか、、Linuxで家計簿付ける人っているのだろうか。(^^; 需要があるかどうかわかりませんが勉強かねてそれらしいの作ってみます。
>>199 >>198 じゃないけどモノによっては期待する。
今OOo使って家計簿つけてるんだけど、なんかイマイチ。
機能を絞り込んだ「一人暮らしの男のための家計簿」みたいな感じだと俺は使うと思う。
201 :
197 :03/06/08 21:38 ID:NVYlBdnZ
>>199 >>200 の「一人暮らしの男のための家計簿」ようなやつがほしい。
#さらに完成度が高まると、主婦層を狙ったキラーアプリにもなる!
aunjuta って内蔵エディタ以外のエディタ指定できますか? なんか、そういう設定項目が見つかりません。
203 :
197 :03/06/14 07:43 ID:aLrsfyXo
ぢつは
>>203 がアクセスできるうちに手にいれたのだが
src/menu.cpp:40: invalid conversion from `void*' to `gchar*'
src/menu.cpp:40: invalid conversion from `void*' to `void (*)()'
っていうのが9回くらい出た後に
src/menu.cpp: function 内の `void print_hello(void*, unsigned int,
GtkWidget*)':
src/menu.cpp:63: invalid conversion from `void*' to `GdkEvent*'
となってコンパイルできない。
gcc-3.2.2-5
gtk2-2.2.1-4
glib2-2.2.1-1
直してからカキコしようかとも思ったが、
あまりカキコせずにいるのもなんかなーと思ったので一応。
197どこ逝った
age テモ イイ? ∧_∧ ∧_∧ ∧_∧ ( ・∀・ ∩ ( ・∀・) ( ・∀) ⊂ ノ ⊂ ⊂ ) ( (_`つ ,(__つ < < < > 〉\ \ し' (_(_) (__) (__)
どなたか助けて下さい。
gtkhtmlの、src/gtkhtml.cの2670行目くらいにある
gtk_html_im_preedit_changed_cb (GtkIMContext *context, GtkHTML *html){
g_warning ("preedit changed callback: implement me");
}
をちゃんと実装したいのです。(このメソッドは現在CVSから取ってきた
物でも実装されてません)
目的は、evolutionで日本語メールを書く時に、XIM(or IIIMF)経由で入力すると
確定前の変換中の文字が見えないのを直したいのです。
http://docs.linux.cz/gtk/gtkimcontext.html#GTK-IM-CONTEXT-GET-PREEDIT-STRING ここらへん見ながらいろいろいじったのですが、CもGTKも全く分らないため、
私には手が出せそうにありません。
よろしくお願いします。
>>208 「いろいろいじった」のなら手は出せてるという事。
そんなに心配せず、勇気を持ってhackしれ。
俺はそっち専門じゃないので力になれないがとりあえず、
ちゃんと未確定文字が見えてる非gtkhtmlのアプリのソースを
漁るとか、im-module関係のプロダクトのソースをのぞくとか。
あるいは、gnome-devel at gnome.gr.jpあたりで「格闘してます」
ていう話を出せば、助け舟出してくれる人もいるかも。
GTKもWideStudioも見た目がダサダサなんですが、もう少しマシなのありませんか? ソースあるんだから自分でいじれ とかは無しでお願いします
具体的にどの部分か書かないと意味分かんねーぞゴルァ。 けどツールキットとして見た目がダサい、ってことなら GTKのテーマ使えば変え放題だと思うんだけど。
言いたいのは
>>75-78 と同様のことでした
Windows標準色に慣れきってるので随分違和感があるんだよなぁ・・・テーマ書くのめんどくさいし
214 :
211 :03/07/12 15:08 ID:CNiFHab+
俺はダイアログでESC押した時とかEnter押した時なんかの挙動のほうが気になるんだけど。 変更可能?ESCで閉じたりとか
少なくともGDKレベルでやれば何とかなる気もすます。 ていうかバグ臭いかなそれ。
218 :
login:Penguin :03/07/14 02:43 ID:5XjH4O4S
age
219 :
山崎 渉 :03/07/15 11:17 ID:doz396Fq
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
220 :
login:Penguin :03/07/15 12:05 ID:Fo16Kpwc
(・∀・)renice!
221 :
login:Penguin :03/07/17 20:37 ID:qoyTZeYl
で、GtkGLExt使ってるヤシっている?
222 :
login:Penguin :03/07/18 00:28 ID:NwO1ORPE
/* 初めて書いたGTK2アプリを記念カキコ */ #include<gtk/gtk.h> int main (int argc, char** argv) { GtkWidget *window; GtkWidget *calendar; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); calendar = gtk_calendar_new(); gtk_container_add(GTK_CONTAINER(window), calendar); gtk_widget_show_all(window); gtk_main(); return 0; }
225 :
login:Penguin :03/07/23 11:46 ID:ZPPlsMW8
(・∀・)renice!
>>223 はその後
gtk_window_set_title(GTK_WINDOW(window), "gcal");
を加えたに12signal
227 :
login:Penguin :03/07/27 11:44 ID:Aq2rr+SO
(・∀・)renice!
228 :
login:Penguin :03/07/30 12:13 ID:cPdgkLk2
(・∀・)renice!
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
230 :
login:Penguin :03/08/02 10:26 ID:2rmp9gin
(・∀・)renice!
231 :
login:Penguin :03/08/08 11:54 ID:mg5o8ebS
(・∀・)renice!
232 :
login:Penguin :03/08/08 13:14 ID:9dXoYmRI
(・∀・)
233 :
login:Penguin :03/08/13 12:31 ID:pfCYHBFY
(・∀・)renice!
234 :
山崎 渉 :03/08/15 22:50 ID:dil3w4kp
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
235 :
login:Penguin :03/08/15 23:48 ID:GfNK1qbf
(・∀・)renice!
もしかして、gtk1.2 で Button4,5(ホイール)の GDK_BUTTON_PRESSイベントって配送されない?
237 :
login:Penguin :03/08/17 07:22 ID:MkQ6Z6x8
質問。 ItemFactory のアクセラレーターキーの指定で、 ファンクションキーの場合はどう表記すればいいですか?
IDがGtK+なので祈念化旗鼓
239 :
login:Penguin :03/08/25 09:48 ID:+hXUD3jL
(・∀・)renice!
240 :
login:Penguin :03/08/28 18:06 ID:r/AujdJz
gtk+2ってかなり重くない? gtk+1は再描画一瞬で終わるのにgtk+2は描画してるの見えるし。 何が悪いんだろ。utf8? xft?
241 :
login:Penguin :03/08/28 18:29 ID:HlBh46Kn
メニューバーをクリックするとメニューが出てくる(ファイルとか編集とか) 同じ場所をもう一度クリックするとメニューが引っ込む・・・ はずなんだけど Linuxのアプリって出したメニューが引っ込まないような気がする 引っ込むようにはできないの?
gtk2を使ってちょ。
初心者です。どうしても気になるけれど どこにも解説がない事があります。 なぜ GtkButton *button = gtk_button_new(); じゃなくて GtkWidget *button = gtk_button_new(); なのですか?
gtk_button_new()が GtkWidget* を返すからだろ。
245 :
243 :03/08/29 23:13 ID:9qGUa9Nr
つまりは、なぜに GtkButton *gtk_button_new(void); でないか、ということをお聞きしたいのです。
鷲のしょーもない理解でよければ... GtkButtonヴィジェットは、ボタンとしての側面以外にも 「ラベルとかをはりつけて表示する(Container)」とか 「シグナルを発生する」(まぁボタンとしての性質だが、ボタンに限らない) とかもある。 そこで、生成するときはGtkWidgetで生成しておき、必要に応じて キャスト(GTK_BUTTON()とか)して使う。 ボタンの性質(押されているか)を扱うときはGTK_BUTTONでキャストするし コンテナの性質(ほかのヴィジェットを貼り付ける)を扱うときは GTK_CONTAINERでキャストすることで それぞれの型のヴィジェットとして扱うことができる。
>>243 なぜなら、オブジェクト指向に則っているから。
>>247 オブジェクト指向なら new くらい継承してくれってことじゃないのか?
249 :
243 :03/09/01 01:17 ID:uanR/ozZ
>>246 解説どうもです。
そこらへんの使い方は分かってるつもりなんですが、
「そこで」の部分の理由がよく分かないんです。
普段は、ButtonはButtonとして定義して、CONTAINERとして使いたい
ときはそうキャストすればいいのではないかと思ったので。
>>247 ,248
すまん、よく分からない。(Eiffel本読書中の身です)
javaやc++と違ってcでオブジェクト指向を実現しているgtk+では アップキャストでも明示的にキャスト用マクロが必要となる。 GtkWidget* を引数にとる関数を使う頻度の方が GtkButton* を引数にとる関数を使う頻度より多いから 最初から GtkWidget* を返した方が後々のキャスト量が減ってプログラム記述の冗長さが減る
251 :
243 :03/09/01 12:57 ID:uanR/ozZ
>>250 なるほど、頻度の問題なんですね。
どうもありがとうございました。
252 :
login:Penguin :03/09/01 20:35 ID:2b6fGses
素朴な質問です。 gtk2でオリジナルwidgetを書いています。 親widgetでハンドルされていないイベントを追加する必要に迫られました。 (例:GDK_POINTER_MOTION_MASK) ただし、realizeイベント・ハンドラはオーバーライドしていません。 皆さんならどうしますか? 1. realizeをオーバーライドして、GdkWindowAttr構造体event_maskメンバで指定する。 2. GInstanceInitFuncハンドラ内でgtk_widget_add_events()を呼び出して追加する。 3. それ以外。
253 :
login:Penguin :03/09/06 17:30 ID:E4nfQMs/
(・∀・)renice!
(・∀・)renice!
255 :
login:Penguin :03/09/22 23:08 ID:vXbOU9AM
VRMLオブジェクト(CG)をファイル選択widgetから選択し、 ウインドウwidgetに表示出力させたいと思っているのですが、 VRMLオブジェクトを出力出来る様なwidgetは存在するのでしょうか? もし知っている方いらっしゃいましたら、ご助言宜しくお願いします。
>>255 "VRMLオブジェクトを"直接表示できるものは知らないが、
VRMLの表示部分は自分で作成するのであるというのなら、2通りの方法が
1.線や塗りつぶしが主体の場合
widget=gtk_drawing_area_new() で表示領域を確保
barwidget[trk]->window をDrawableとしてgdk_draw_rectangleなどの
Gdk描画系関数を実行
Xのプログラミングに近く、色の扱いが面倒だし、再表示のたびに線とかを
描き直さなければならない(DrawableとしてPixmapを使えばいいが)
2.イメージを表示する場合
pixbuf=gdk_pixbuf_new(...);
widget=gtk_image_new_from_pixbuf(pixbuf);
なんかでpixbuf描画領域を確保。描画操作はpixbufに対して行う。
pixbufは1ピクセルにつきR,G,B(,A)1バイトずつのVRAMのイメージ。
色はRGB要素を指定するだけでいいが、線を引くにもどの座標に
点を打つかは計算してやらないといけない。
1,2の合わせ技として、gdk_pixbufの内容をDrawableに描く関数
(gdk_draw_rgb_image等)もあるので必要に応じて使う。
>>252 超遅レスだけど、余計なコ−ド書かない2でいいのでは。
realizeを書くケ−スは、realizeが実装されていない抽象クラス(GtkWidgetとかGtkContainer)から直に派生する時ぐらいじゃないかな。
258 :
257 :03/09/23 17:53 ID:CXvOrUVV
あ−実装されてないっていうのはgdk_window_newを呼んでないって意味でつ
259 :
login:Penguin :03/09/25 17:05 ID:FN6PNMc8
(・∀・)renice!
gtktreeview上にリストのデータを表示してる時に、複数行を選択した状態で 右クリックしてメニューを表示させたいのですがどうすればいいんでしょう? 複数行の選択まではできてますが、そこで右でも左でもクリックすると複数 行の選択がクリックした行だけの選択にかわってしまいます。
261 :
login:Penguin :03/10/11 23:17 ID:5hfILiTB
初歩的な質問ですいません。 cygwinでGTKを使用したいため、 様々なホームページを参照した結果GTK2.0をインストールしました。 サンプルソースのインクルードの指定が #include "gtk/gtk.h" となっているのですが、今回、インストールした結果、 次のようなディレクトリ構造であった為、以下の記載に変更しました。 gtk-2.0/gtk/gtk.h これでgcc test.cを実行したところ gtk.hでincludeされている他のヘッダーファイルが参照できず、 たくさんエラーが出ました。 そこで、元々のサンプルのインクルードの記載に戻し、 gtkディレクトリを一つ上にコピーしたのですが、同様の結果でした。 すいませんが、解決方法をご教授下さい。 <サンプルソース> #include <gtk/gtk.h> int main(int argc, char* argv[]){ GtkWidget* window; GtkWidget* label; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); label = gtk_label_new("Hello World."); gtk_container_add(GTK_CONTAINER(window), label); gtk_widget_show_all(window); gtk_main(); return 0;}
cygwinのことは知らないけど、コンパイルのオプションに-Iでインクルード ファイルのありかを教えるんじゃないの? というか pkg-config --cflags --libs gtk+-2.0 で全部勝手にやってくれる。 ドキュメントのコンパイルのあたりよんでよ。
GTK使うなら、1.2系を使えよ!
1.2なら俺がいろいろ教えてやるぞ
1.2って削除の方向に向かってるんですか?
267 :
login:Penguin :03/10/14 23:23 ID:6azmQS+6
初心者です。 GTKでxpmを表示することができたのですが、 xpmデータの上に、さらにxpmデータを好きな位置に 描画することってできますか? すいません、教えて下さい。
>>267 gdk_pixbuf_new_from_file で、ファイルからGdkPixbufをそれぞれ取得
gdk_pixbuf_render_to_drawable で、GdkPixbufをGdkDrawableに重ねうち
GdkDrawable(pixmap)はgdk_pixmap_newで作成しておく...(1)
(1)で作成したpixmapをgtk_drawing_area_newで取得したwidget->windowに
exposeシグナル発生のつど転送(gdk_draw_drawable)
で、いけると思う。
GdkまわりはXの知識がないと難しいかも
269 :
267 :03/10/18 01:50 ID:+faUZTm8
270 :
login:Penguin :03/10/24 19:11 ID:FhYActk9
age
271 :
login:Penguin :03/10/26 16:31 ID:khx8YbTs
GTK1.2+のいろいろなホームページを見たのですが、 理解できないので教えて頂けないでしょうか。 xmp、テキストなどにウィジェットにフォーカスって当てることできますでしょうか? できるようでしたらどのような方法でしたら良いか教えて下さい。
272 :
login:Penguin :03/10/26 17:21 ID:XFblFRSC
gtk_container_set_focus_childとか?
>>271 イベントボックスの中にGtkLabelとか入れればできる。
FAQだから、ぐぐれ。
274 :
login:Penguin :03/10/28 00:46 ID:n92YYpRn
275 :
login:Penguin :03/10/31 18:42 ID:IOboVxUJ
gtk+ではじめるXプログラミングなる本を読みながら、Gtkに入門してみました。 今、テキストエディタらしきものを作ってみようと思っています。 テキストウィジェットの横幅を半角80文字固定にしたいのですが、方法が わかりません。 また、半角80文字目で自動的に\nを挿入する方法も出来れば教えて下さい。
>>275 glade で雛形を作って、生成されたソースコードを読む手もあるなぁ
>>275 gdk で文字幅もらってそこからウィンドウサイズを決めるとか。
gtk つかうなら 2.* の方がよくないかい? text ウィジット
も textview にかわってるようだし。
278 :
login:Penguin :03/11/05 01:14 ID:a2IzLU73
ge
279 :
login:Penguin :03/11/10 23:36 ID:SWl6gM2L
AGE
280 :
login:Penguin :03/11/16 02:05 ID:RQO5eIp4
すみません。 直接Gtkと関係ないのかもしれませんが、Gnome標準アイコン(CD-ROM)等を 表示させるにはどうすればよいのでしょうか? Gladeの吐き出したソースを元に、以下のプログラムを作成してみましたが、ダメでした。 なお、事情によりGTK1.2でプログラミングを行っています。よろしくお願いします。 #include <gtk/gtk.h> int main(int argc,char *argv[]) { GtkWidget *window1; GtkWidget *image1; gtk_init(&argc,&argv); window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window1), ("window1")); image1 = gtk_image_new_from_stock ("gtk-go-up", GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_widget_show (image1); gtk_container_add (GTK_CONTAINER (window1), image1); gtk_main(); return 0; }
gtk_widget_show (window1); いれれ
282 :
243 :03/11/16 10:13 ID:ttZTK75X
283 :
login:Penguin :03/11/16 12:50 ID:blYqkdPM
284 :
280 :03/11/16 13:24 ID:RQO5eIp4
>>281-283 さんきす!
ちょっと今日は時間がないので、明日辺り再チャレンジしてみます!
285 :
280 :03/11/17 18:26 ID:YrxAFWBK
#include <gnome.h> すると、ヘッダファイルが見つからないとエラーが出てしまいます。 これは、Gtkの時同様にコンパイルオプションが必要に違いない! と思って、ググって見ました。それを参考に $gcc -c -main.c `gtk-config --cflags` `gtk-config --libs` `gnome-config --cflags --libs gnomeui` として、コンパイルしてみたのですが gcc: -lgtk: リンクが完了しなかったのでリンカの入力ファイルは使われませんでした 等のエラーが出てしまいコンパイルできません。 ちょっと、Gtkからお話ずれてしまいますがどの様にコンパイルすればいいのでしょうか? なお、gnome-config --cflags --libs gnomeuiを直接実行するところちゃんと 値が帰ってきました。
288 :
login:Penguin :03/11/18 22:39 ID:/SRrudRK
いきなり質問から入ってすみません。 今、GTKを使っているのですが、リストボックスにスクロールバーをつける方法 がわかりません。私が買った本やサイトなどをみてもテキストにスクロールバーを つける方法しかありません。 hscroll=gtk_hscrollbar_new(GTK_TEXT(text)->hadj); この(GTK_TEXT(text)をGTK_LIST(listbox)変えればいいなんて安直にやってみた のですが当然のごとくstructure has nomember named 'hadj'といわれました。 リストボックスには別のメンバが用意されているのですか?それとも根本的にに間 違っているのでしょうか?どなたかご教授おねがいします><
GtkScrollbar 使わずに GtkScrolledWindow 使う。
>>289 GtkScrolledWindowとctreeでやりたかったことができました!
listboxはGtkScrolledWindowでやってもエラー?が、、きっと何かまちがって
たんですね。。
ありがとうございました!
291 :
280 :03/11/21 01:45 ID:S7n3MU64
>>287 お世話になりました。ウィンドウをGtk Window型(?)からGNOME_APP型
に変更して、無事ツールバーを実装する事が出来ました。
Linuxのプログラミング自体が初めてで、基礎的な質問をしてすみませんでした(^^;
292 :
login:Penguin :03/11/24 19:03 ID:ukNjiyv7
293 :
login:Penguin :03/11/25 04:09 ID:C+TQgfqW
gtk_widget_show(dialog); func(); gtk_widget_destroy(dialog); として、func()を実行中は「実行中、、、」みたいなダイアログを表示させて おきたいのですが、うまくいきません。 実際に動かしてみると、func()は処理されるのですがdialogが表示されません。 正しくは、どうするべきでしょうか?
gtk2.xを勉強したいんだが どっかいいサイトないかな?
たった二つ上のレスぐらい見ろよ・・・
>>293 func の後で gtk_main() で、
func の終了時に gtk_main_quit() をよぶ。
>>293 の質問と似てるけれど、ソケット通信の待ち受けにwhile+selectを使おうと思いましたがどこに記述すればよいのかわかりません。
gtk_main()の上に書くと作ったwidgetが表示されず、下に書くとどうやらgtk_main_quit()が呼ばれたあとに実行されてしまいました。
300 :
298 :03/12/01 03:12 ID:2vS05X6T
>>299 さんのヒントでググって、
i = gtk_timeout_add (時間, (GtkFunction)関数, 引数) ;
gtk_main ();
gtk_timeout_remove(i) ;
てな具合にしたら動いたみたいです。どうもありがとうございました。
>>300 gdk_input_addの方が良いと思うんだが、どうよ?
302 :
gnomeユーザー :03/12/01 23:19 ID:kfK4dpcc
このスレを呼んで、gnome.hを使うようになった者です。 設定ファイルの読み込みから、ツールバーの作成まで容易に出来る様に なり、かなり重宝しています。 さて、そこで質問なのですがツールバーから呼び出されるコールバック関数に 引数を渡したい場合はどうすればよいですか? static GnomeUIInfo toolbar[] = { GNOMEUIINFO_ITEM_STOCK("メール送信","send mail.", send_mail(*text), GNOME_STOCK_PIXMAP_MAIL_SND), GNOMEUIINFO_END }; void send_mail(GtkWidget *text) { この関数で、テキストウィジェット*text内の文字列 を処理 } int main(...){ ... GtkWidget *text; ... } 知っていれば簡単な事の様な気もするのですが…。 宜しくお願いします。
gnome_app_create_toolbar_with_data ()
>>301 む、自分はそれ知らなかったっす。
どんな風に良いんでしょう?
306 :
gnomeユーザー :03/12/02 00:08 ID:V7ZgsjLM
>>303 ,304
ありがとうございました。
with_data()
で試して見ます。
307 :
gnomeユーザー :03/12/02 01:05 ID:V7ZgsjLM
出来の悪い子でごめんなさい(つдT)
gnome_config_set()あたりはサンプルソースが載っていてわかりやすかったのですが・・・。
>>304 のページを読んで見ましたが、わかりません。
「コールバック関数の data フィールドに引き渡される拡張パラメータを引数として呼び出して下さい。」
とあるので、
void test(GtkWidget *widget,gpointer data)
{/*textウィジェットの文字数を調べてみる*/
printf("length=%d\n",gtk_text_get_length(GTK_TEXT(data)));
}
static GnomeUIInfo toolbar[] = {
GNOMEUIINFO_ITEM_STOCK("てすと","test",
test,
GNOME_STOCK_PIXMAP_MAIL_SND),
GNOMEUIINFO_END
};
int main(int argc,char *argv[])
{
GtkWidget *window,*text;
gnome_app_create_toolbar_with_data (GNOME_APP (window), toolbar,text);
...
}
としましたが、うまく動いてくれません。なんか意味を取り違えて、勘違い
してるんだとは思うんですが。
309 :
gnomeユーザー :03/12/02 15:23 ID:V7ZgsjLM
>>307 ちなみに
gnome_app_create_toolbar_with_data (GNOME_APP (window), toolbar,(gpointer)"test");
として、コールバックで呼び出すと"test"と表示する事が出来るのでWidgetの送り方がおかしいんだとは思うんですが…。
gnome のライブラリ使ったことないけど printf("length=%d\n",gtk_text_get_length(GTK_TEXT((GtkWidget *)data))); とか。 void test(GtkWidget *widget,gpointer data) この widget って text じゃないのか?これまた、全く知らんのだが
311 :
gnomeユーザー :03/12/03 20:30 ID:O3qA9IIV
一緒に渡したい値がいくつかあったので、textもまとめて一つの構造体にして 構造体のポインタを渡すことにより、無事にtextの中身を処理できるようになりました。 ありがとうございました。
312 :
gnomeユーザー :03/12/03 23:03 ID:O3qA9IIV
たびたびすみません。 GTKは<varargs.h>と干渉してしまうのでしょうか? 正常に動作していたプログラムに、gtk/gtk.hをインクルードすると プログラムが動作しなくなります。(インクルード文以外は一切変更なし) >>va_start(args); の部分で マクロ "va_start" は引数を 2 要求しますが、1 個しか与えられていません と、gccがエラーを吐き出してしまいます。該当行をコメントアウトすると コンパイルはできますが、やはりセグメントエラーで実行できません。 何か解決策はないでしょうか?
>>312 うーん、もうちょっとご自分で調べられないもんでしょか。
なぜにそんな古めかしいものを使うのでしょうか。
いにしえのANSI C(C89)から<stdarg.h>が推奨です。
そっちではva_startマクロの引数は二つです。
どのような理由があるか知りませんが、ANSI Cを前提に
書かれているGTKとそれ以前とのコードの組み合わせは、
無理が出ても仕方がないように思われます。
314 :
gnomeユーザー :03/12/03 23:30 ID:O3qA9IIV
ちなみに、ソースの概略はこんな感じです。 int pac(va_alist) va_dcl { va_list args; va_start(args); } int main(){ ... va(pac,"test\n") ... }
316 :
gnomeユーザー :03/12/04 01:48 ID:qZ2UE2k7
すみません(^^; とりあえず、自己解決しました。 古めかしいヘッダファイルだったんですね(^^; varargs.h gtkでググったんですけど、有力な手がかりがなくて。 なぜこのヘッダファイルなのかといいますと、参考文献に載っている ルーチンを使ってgnomeアプリを作っていましてその文献に載っている 通りにやっている為です。 すみませんでした。
>>316 はあ?なんでstdargs.h使わんの?
318 :
login:Penguin :03/12/05 00:38 ID:G4+zQR3e
下のプログラムをプロファイラ(memprof)で見てみると func で確保した ものがリークしてると出るんです。pixbuf しかないし、ポイントし続けてる つもりなんですが、どこがいけないのでしょう? #include <gtk/gtk.h> GdkPixbuf *func(void) { GdkPixbuf *pixbuf; pixbuf=gdk_pixbuf_new_from_file("file.xpm",NULL); return pixbuf; } int main (int argc, char *argv[]) { GdkPixbuf *pixbuf; gtk_init (&argc, &argv); pixbuf=func(); gtk_main (); return 0; }
ちなみに、元のプログラムからいろいろ省いたのが上ので、元の プログラムでは、pixbuf の表示はできてます。 それと、gdk_pixbuf_new_from_file は何箇所か使ってるんですが、 2回目以降はリークがでません。
>>318 自分はgdk-pixbuf使った事無いんで自信はないですが、
使い終わったらunref()するのでは。
>>320 func や main に g_object_unref をいれてみましたが、相変わらずです。
上のプログラムでは pixbuf を使ってないですが、元のでは頻繁に利用する
ツリー表示のアイコンとしてつかってるので、プログラム終了まで
解放する必要がないと思ってるんですが・・。
>>320 gdk_pixbuf_unref(pixbuf); は?
リファレンスマニュアル読んでないだろ。
>>322 GTK2以降のリファレンスマニュアル読んでないだろ。
Warning
gdk_pixbuf_unref is deprecated and should not be used in newly-written code. Use g_object_unref().
>>322 gtk2 なので上記のとおりなんです。
325 :
318 :03/12/07 00:50 ID:XPfatUb2
gtk と glib のデバッグ情報付きライブラリーをくっつけてみた。 pixbuf 読み込むための外部モジュールを読み込んでるあたりが、関係してる ようだけど、俺のスキルでは読みきれません。 どなたか解説きぼん。
他のメモリプロファイラを試してみる
328 :
318 :03/12/09 00:40 ID:PATSnh0H
>>326 mpatrol 試した。
memprof 以上に unfreed があると指摘されまくり。
同じプログラムなのに・・。
mpatrol がよくわかってないのでもちっと修行してみやす。
>>327 まずテストコード書いて試してみよう。そんでだめなら、そのテストコードをここで
晒してみれば、きっと誰か答えてくれるよ。
330 :
327 :03/12/09 00:52 ID:9M8YybjC
static GList *
Load_servlist(GList *list_server)
{
FILE *fp ;
char tmp[256] ;
memset(tmp, '\0', sizeof(tmp)) ;
if((fp = fopen("servlist.lst", "r")) == NULL){
printf("serverlist not found\n") ;
exit(0) ;
}
while(1){
if(fgets(tmp, sizeof(tmp), fp) == NULL)//ファイルの終わり
break ;
if(tmp[1] == '\n')//空行を飛ばす
continue ;
tmp[strlen(tmp)-2] = '\0' ;//改行を削除
list_server = g_list_append(list_server, tmp);//リストに追加
printf("add list:%s\n", tmp) ; //ここではちゃんとファイルから読んだ文字列が表示されてる
memset(tmp, '\0', sizeof(tmp)) ;
}
fclose(fp) ;
return list_server ;
}
このあとに
gtk_combo_set_popdown_strings(GTK_COMBO(combo_server), list_server) ;//リストを登録
gtk_widget_show (combo_server);
としています。
http://member.nifty.ne.jp/jago/gtk/gtk05.htm ここのテストコードのコピペでは動作しましたが、文字列格納部分だけこれに差し替えたところダメでした・・・
>>330 全ての要素が同じものを指してるからそうなる。
GList に追加する文字列は、それぞれにメモリーが割り当てられてる必要が
ある。g_strdup(tmp) した結果を g_list_append したらどう?
>>330 g_list_appendしても、list_serverには文字列がappendされるわけじゃなくて、
tmpへのポインタがappendされるだけ。で、その後ご丁寧にmemsetで'\0'
を代入してるから、中身が消えちゃうと。
だから、g_list_append(list_server, g_strdup(tmp));に変更すればちゃんと
動くはず。
それと、この件とは関係ないけど、fgetsは文字列の終端にちゃんと
'\0'を代入してくれるので、memsetは不要だよ。
333 :
332 :03/12/09 01:29 ID:0I2itgVb
ケコーン?(;´Д`)
334 :
327 :03/12/09 01:35 ID:9M8YybjC
>>331 さん御指摘のとおり
list_server = g_list_append(list_server, g_strdup(tmp));
としたら出来ました。ありがとうございます。
早く漏れも質問に答えられるくらいになりたい(;´Д`)
335 :
327 :03/12/09 01:39 ID:9M8YybjC
>>332 ありがとうございます&漏れのためにケコーンおめ(*´Д`)
リスト追加のあとのmemsetも消すことにします。
336 :
login:Penguin :03/12/11 16:46 ID:GOm24c4o
ちょっとお聞きしたいことがあります。 僕が使っている環境では、G_MAXINTは2147483647でlong型の最大値になっているのですが、 gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_area),G_MAXINT,height); というような使い方ができません。int型の最大値の32767までしか指定できません。 これ以上大きな数を指定することは仕様上できないのでしょうか? 初心者で質問がわかりづらいかもしれませんがよろしくお願いします。
どうできないか書いた方がいいんじゃない。 コンパイル通らんのか、反映されないだけなのかとか・・ それと、どういう目的でそういう値にしたいかも
338 :
336 :03/12/13 12:37 ID:6GbNE/xa
コンパイルは通ります。drawing_areaをgtk_window_new(GTK_WINDOW_TOPLEVEL)で作ったウィンドウに入れて gtk_widget_set_usizeで最小サイズを設定しているのですが、上のようにgtk_drawing_area_sizeを実行すると設定 した最小サイズになってします。 目的は、グラフを拡大したいということです。横軸を時間軸として、その横軸を長くすることでグラフを拡大しようと しています。(なんか伝わりづらいなぁ)
>>338 「なんか伝わりづらい」と感じたら、もうちょっと
文章を校正してから投稿しませう。
まず、G_MAXINTはlongではなく、intの最大値になっているはず。
自分の手元にあるGTK1.2と2.0のヘッダではどちらも、
#define G_MAXINT INT_MAX
#define G_MAXLONG LONG_MAX
となっています。
次に、windowの中にdrawing_areaが入っている、という構造は
理解されていますか?前者のサイズが後者より小さければ、
当然親である前者のサイズ指定が優先になります。
あるいはそういうことではないなら、コードを出した方が早いのでは。
(2.0ではdeprecatedな関数名が出ているので、GTKのバージョンは
1.2だと思いますけど、まずそれが書いてあった方がよかったかも。)
340 :
338 :03/12/15 16:12 ID:ewsDweDI
レスが遅くなってすみません。 まず、gtkのバージョンは1.2です。 自分で考えてみたのですが、僕の環境ではINT_MAXが2147483647に設定されているので G_MAXINTも2147483647に設定されているが、本来はintの最大値は32767。 だから、G_MAXINTも本来は32767なはず。 つまり、 gtk_drawing_area_size (GtkDrawingArea *darea, gint width, gint height); のwidthとheightは0〜32767までしか指定できない。 ということでしょうか?
>>340 gtk1.2では
struct _GtkRequisition
{
gint16 width;
gint16 height;
};
でし。ソースみてけれ。
342 :
336 :03/12/16 17:34 ID:677jpJGz
>>341 やっぱりそうなんですか。わざわざ答えてくださって、ありがとうございます。
32767より大きくすることは無理みたいですね。
>>342 明示的な制限があろうがあるまいが、そんなでかい座標系を安直に扱かってま
ともに動くか不安、ってのが普通の感覚では。
正規化して数千ぐらいには収まるようには出来ないの?
そもそも何をやりたいのか書いた方がもっと建設的な議論が出来そうだけど。
344 :
login:Penguin :03/12/20 15:53 ID:GhCH1q1G
345 :
login:Penguin :04/01/12 15:15 ID:TTcLcp55
346 :
login:Penguin :04/01/15 06:51 ID:IzHB4VVw
D使おうよ
347 :
login:Penguin :04/01/22 18:28 ID:KKqp1ICo
GTK 勉強しようと思うんですが、1.2 と 2.0 って、どっちのコードの方が 単純なものになりますか?2.0 になってやれることが多くなった反面、複雑な 手続きを踏む必要ができたとか、コードが整理されてシンプルかつ軽くなった とかの情報をいただけるとさいわいです。
今さら1.2は覚えるだけ無駄なので2.0系にすべし。 少なくとも公式のドキュメントは2.0系の方が充実しているしね。
350 :
login:Penguin :04/01/25 16:47 ID:X02pqnTw
352 :
login:Penguin :04/01/25 20:35 ID:uE3bT0rU
gtk+ をコンパイルするときに ./configure --with-locale=ja_JP.EUC とすると日本語表示OKなのですが、 ./configure --with-locale=ja_JP.eucJP とすると日本語表示NGになってしまいます。 ja_JP.EUC と ja_JP.eucJP の違いは何でしょうか? ja_JP.eucJPだと不可な理由は何でしょうか?
>>352 システムにja_JP.EUCというlocaleが存在しないからでは?
OSは何を使っている?
>>353 間違えた。s/ja_JP.EUC/ja_JP.eucJPね。_| ̄|◯
355 :
352 :04/01/25 21:09 ID:uE3bT0rU
>>353 OSはMacOSXです。
$ ls /usr/share/locale/ja*
ja ja_JP ja_JP.SJIS ja_JP.UTF-8 ja_JP.eucJP
となるので ja_JP.eucJPは存在します。
環境変数は
$ export LANG=ja_JP.eucJP
としています。
たしか BSD 系の OS は X11 の locale については XLocale が面倒見てたと思うので、 /usr/share/locale/* とはまた別になると思う。( Linux は glibc が全部やってる) この周りの話は限りなくシステム依存なので Mac 板で聞いたほうがきっと早い。
357 :
login:Penguin :04/01/26 15:01 ID:KEkReNS8
gtk2 を使って画像表示のアプリを作ってるんですがカーネルのバージョンによって 動作速度がひどく変わります。 ウィンドウからはみ出すような大きな画像をドラッグしてスクロールするように しているのですが、カーネル2.4 だとサクサク動くのに 2.6 だとマウスの動きに かなり遅れて画像がついてきます。 2.6 でも軽く動くように変えたいんだけど、何か気をつけるところでも あるんでしょうか?
漠然としすぎてて、わかんねーよ(w
359 :
login:Penguin :04/01/26 15:08 ID:KEkReNS8
マウスまわりの処理で、カーネルが変わって気をつける点があるのかな ってことです。
みんな、GObject とか使ってる? チュートリアルとか読んでみたんだけど、使い方が良く分からん...。
361 :
login:Penguin :04/01/27 21:34 ID:xBBLI74B
357 だけど解決した。 psmouse のサンプリングレートと解像度をモジュールのオプションとして 指定したらなおった。
windowにfixedを貼り付けました。 windowにexposeシグナルのハンドラをconnectしました。 そのシグナルハンドラに制御が飛んできません。 fixedを除いてだったら渡ってきます。 また、同じハンドラをfixedにconnectすると渡ってきてくれます。 こういうものなのでしょか。 fixed貼ってあっても、あくまでもwindowにシグナル受け取って欲しいものなのですが。
Pangoで文字の重ね打ちがやりたいんですが面倒?
gtk_widget_get_pango_contextとpango_layout_newで PangoLayoutを取得して pango_layout_set_textでテキストをセット gdk_draw_layout_with_colorsでGdkDrawableに描画することができる。 ただしアンチエイリアスされる状態で下手に重ねうちすると 文字がどんどん太りがちになるので注意 (文字をすでに打った上から重ねうちすると、すでに表示されている 文字とさらにアルファブレンディングすることになる。 白地に黒文字を表示する場合、これをくりかえすと重なった部分が どうしても黒にどんどん近づいてしまう)
>>360 素の GObject 使うより、とりあえず gob 使ってみるとか。
366 :
360 :04/01/30 09:25 ID:xXVlWb2I
>>365 gob 知らなかった.。・.。・(ノД`).。・.。・ありがとう
>>364 3Q
> ただしアンチエイリアスされる状態で下手に重ねうちすると
> 文字がどんどん太りがちになるので注意
そういえばGimpの文字ツールのプレビュー画面でそういう現象が
発生してるような気が。
368 :
364 :04/02/01 02:44 ID:PLV4gnHt
単に色を変えるとかなら確実に(文字を描く前の) 背景を再描画すればよいが Boldとか、影つきとか出したいのであれば 自分でアルファ値を計算するのが確実かも。 すると描画する前にどこかの(描画エリア以外の)メモリに 文字のアルファ値を取得しなければならず、これがけっこう面倒。 一回(GdkPixmapなどの)Drawableに描画したあと、その値を gdk_pixbuf_get_from_drawableで配列に取得して計算、なんてやったな。 もっとうまい方法があるのかもしれんが。
369 :
pao :04/02/02 00:05 ID:lpWaJ20M
RedHat Linux7.3でgtk1.2を使っているのですが、 drawing areaにconnectしたコールバック関数が呼ばれず困っています。 connectしたイベントは ・キープレス ・ボタンプレス、リリース ・ポインタ移動 です。念の為、イベントマスクも設定しているのですが。 他に、必要な処理があるのでしょうか? どうしたら、呼ばれる様になるのでしょうか? よろしくお願いします。
gtk のソースにウィジットの使用例が付いてるから見てみたらどう? 初めて使うウィジットの時には結構役にたつぞ。 ついでに、新しくプログラムを組むなら gtk2 のほうがよくないかい?
371 :
login:Penguin :04/02/02 08:14 ID:X88/BAtu
質問スレで解答がなかったので質問させて貰います. gladeでのC++のソースコードの書きだしかたがわかりません。 オプションのコンパイル言語でC++をチェックして、書き出そうとしても エラーがでます。C++を書き出すにはどうすればよいのですか? エラーメッセージは Error running glade-- to generate the C++ source code. Check that you have glade-- installed and that it is in your PATH. Then try running 'glade-- <project_file.glade>' in a terminal. とでてきました。 バージョンはGlade 1.1.3でRedhat9.0をつかっています glade--をインストールすればいいんでしょうか? ターミナルでエラーメッセージのコマンドを打つとnot commandでした. gtk+をC++でコンパイルする方法でも構いませんので,どなたか教えてください
エラーメッセージの通りじゃないの? 何に困ってるわけ? # しかも "not command"って…
373 :
pao :04/02/03 09:55 ID:GjS2l5dh
サンプルソース参考にしてみます。 gtk-1.2は、仕事上の制約なんです。 アドバイス、ありがとうございました。
374 :
pao :04/02/04 18:33 ID:SKoM61X0
テキストwidgetの文字の余白部分に色を設定したいのですが、 この部分の指定方法がわからず困っています。 とりあえず、以下の様にrcファイルで指定してみたのですが、 ダメでした。 どのwidgetクラス(GtkTextの部分)の何(bg,fgの部分)になるのでしょうか? ご存知の方、いらっしゃいましたら、教えて下さい。 よろしくお願い致します。 style "text" { bg[NORMAL] = { 0, 0, 0 } fg[NORMAL] = { 0, 0, 0 } } widget_class "*GtkText*" style "text"
>>357 >ウィンドウからはみ出すような大きな画像をドラッグしてスクロールするように
自分も同じようなものを作ろうと思っていたので
まだこのスレを見ていてもしよければソースを見せてもらえないでしょうか?
>>375 gqview のソースでも見てみたら?
ちょうどそんな感じの操作方法だと思う。
377 :
login:Penguin :04/02/05 13:06 ID:SoJ3gS8K
>>374 style "text"
{
base[NORMAL] = "#000000"
base[ACTIVE] = "#151519"
base[INSENSITIVE] = "#181818"
base[PRELIGHT] = "#151618"
base[SELECTED] = "#252629"
}
class "GtkText" style "text"
378 :
pao :04/02/05 20:15 ID:I9Rb8I9P
お陰様で余白の色が設定できました。 ありがとうございました。
379 :
login:Penguin :04/02/05 21:52 ID:IbsAdnep
gtk_entry_new_with_max_lengthと gtk_entry_select_region を使っているのですが、 GDK-Error X server lost というエラーがしばしば出るですが、 何かご存知の方、いらっしゃいますか。 RedHat7.2を使用しています。
pangoのcvs版、modules/indic/myanmar-xが消えとるじゃん。 なんでじゃ(゚д゚)ポルァ
そら中国に消されたんでしょ
>>383 つづりは Burmese なんだけどやっぱりサポートされて無さげ。(`皿´)キシャー
modules/Attic の中のログだけ見てた。removed/deprecated とそっけなく書かれてた。 ChangeLog 見てみたけど myanmar-x モジュールのことは書いてなかった。 このモジュールが呼び出す主要な関数である pango_x_apply_ligatures() についても さりげなくあぼーんされてた。(´・ω・`)ショボン Sat Aug 2 14:10:31 2003 Owen Taylor <otaylor at redhat.com> * pango/pangox.c (pango_x_apply_ligatures): Make a noop, remove associated code.
388 :
login:Penguin :04/02/11 09:40 ID:d5X1Hh57
age
GTK+やる奴はgtkmmから始めときな. OOPはOOPLでやるのが一番. gtkmmやる奴はRuby/gtkから始めときな.よけいなこと気にしなくていい動的言語が一番.
>>389 さんせ〜。Redhatだかどこかの誰かが、「Cはライブラリ作るための言語」って言い切ってたっけ。
これからGTK始める人は、どんどん(Cじゃない)高級言語でGTKアプリ作ってって欲しい。
ところで「『よけいなこと気にしなくていい』動的言語」って、変数型のお話?
>>389 >>390 勉強のつもりでボタン一個だけ貼り付けたウインドウを作った。
シグナルやイベントもなんとなく解った。
v1.2 チュートリアルを見たらウィジェットのボックスやテーブルは書いてあるけど
ボタンを任意の位置に複数貼り付けるのはどうすればよいの?
javaのようにパネルを貼り付けてそのパネルにボタンを配置すればよいの?
gtkmmはGTKのウイジットをクラスとしてラッパーしたものらしいけど、何処にあるの?
rpm -qa | grep gtkでも出てこない
おいらはgtkmmを使いたい
gtkmmの使い方を説明したものはないの?
gtk-tutorial.20021027.tar.gを見るしかないの?
あぁーー 謎だらけ
>>391 - 今から始めるなら1.xじゃなくて2.xを使ったほうがいいよ
- 任意の位置への貼り付けはGtkFixedとかGtkLayoutとかそれらの入れ子とか
- あとはgoogle先生に
google先生はなんて優しいんだ gtkmm2というrpmみっけ 2.x使って遊んでみる
インストールしょうとしたら libsigc-1.2.so.5 libsigc++-devel が必要といわれ、google先生は教えてくれません 誰か愛の手を差し伸べてください
395 :
login:Penguin :04/02/16 21:34 ID:juVw0kFu
解決しました。
>>390 それOwenのセリフ。
その割にはOwenアプリは(KanjiPadとかMemprofとか)Cで書かれて
いるものばっかりだけど(w
まあアプリに関しては自分の好きな言語を使えばいいんじゃない。
397 :
login:Penguin :04/02/17 11:30 ID:r1qIPww0
Gtkの button widget の relief 部分の幅を削る方法は ありませんか? gtk_container_set_border_width()というのを見つけたのですが これだと buttonの外側の余白しか変わりません。
使ったことないけど、プロパティにあるreliefって、関係なし?
(・∀・)relief!!
>>397 gtk_button_set_relief()は試しました?
402 :
397 :04/02/18 08:46 ID:0LoZKQD9
gtk_button_set_relief()は、reliefの形を変えるもので 幅を削ることはできません。 (NORMALでもHALFでもNONEでも relief が同じ幅を占有します) やっぱこれはできないぽいですねぇ。う〜む。
GtkButtonのdefault_borderプロパティがREADオンリーなので無理でしょう。 やるならGtkImageかなんかをボタンにするとか。
404 :
login:Penguin :04/02/21 01:02 ID:iveKWUuZ
GtkPixmap()で生成したウィジェットをgtk_widget_show()で画像を表示。 その画像の上にgdk_draw_rectangle()で描画した矩形を表示させたいのですが、 どうしても、Pixmapの配下に矩形が表示されてしまいます。 すいません、教えて下さい。
405 :
login:Penguin :04/02/23 21:50 ID:lo6TfN7B
どうゆうこと? もちっと詳しく できればソースつけて
406 :
login:Penguin :04/02/23 22:06 ID:wKxG00oc
スミマセン 藍よりも青し のダンレボゲーム知りませんか?
どこか、gdk_window_set_back_pixmapをparent_relativeをTRUEで使用した場合の いいサンプルってありませんでしょうか。 サンプルを書いて使ってみているものの、対象のGdkWindowをclearすると、 真っ黒にしかならなくて困っています。 #一応、parent_relativeがFALSEの時は、あらかじめ作ったGdkPixmapでGdkWindowの #背景にpixmapを描画してくれるのですが... #リファレンスを読む限りでは、parent_relativeがTRUEでgdk_window_set_back_pixmapを #使うと、Etermみたいな(疑似)透過ウィンドウができるって思ったんだけど、違うのかな?
チュートリアルに書いてあったプログラムをコンパイルしても、 実行ファイルのサイズは、せいぜい数十kbにしかなりません。 しかし、glade でウィンドウにメニューとテキストだけ貼ったものを、 autogen.sh でコンパイルすると、それぞれの .c に対し 200kb 以上の .o ができて実行ファイルも 500 kb を越えてしまいます。 automake/autoconf がらみでコンパイルオプションが長々としているのが 原因だと思うのですが、このリンクの無駄を省く方法をご存知ないでしょうか?
>>408 デバッグオプション外してみたら?
またはstrip -g してみるとか。
ちなみに、チュートリアルのプログラムに-g(デバッグ)オプション付けて
コンパイルするとどれぐらいの大きさになります?
既に付けてたら無視してね。
>>409 strip -g で小さくなりました!早速デバッグオプションまわりについて調べてみたいと
思います。
ちなみにチュートリアルの helloworld に -g オプションを付けてみたところ
14533 -> 164785 となりました。
>>410 それならmakeはそのままで、インストールするときは
make install-stripでインストールすれば、多分stripされるよ。
412 :
質問 :04/03/07 00:54 ID:3z3kajPi
gtkとopneglを併用したアプリを作ろうと思い、gtkglareaに 手を出してみたのですが、ドキュメントがなくて困っています。 gtkglareaはgtkと共存できるglutの代替ライブラリだと思うのですが、 glutとgtkglareaの各関数の対応表みたいなものはどこかのサイトに あるのでしょうか。 特にすぐ知りたいのはglutTimerFuncです。
413 :
412 :04/03/07 04:10 ID:3z3kajPi
一通り.hを読んでみましたが、基本的に初期化についての関数しか用意されていない みたいですね。
>>412 Gtk+ 1.2か?Gtk+2以降はGtkGLExtを使うべし。
415 :
412 :04/03/10 06:04 ID:XpgJ0nF/
>>414 情報ありがとうございます。
Gtk+2なのでGtkGLExtを使ってみることにします。
gtkglareaでglutTimerFuncの代わりにg_timeout_addを使い
簡単なアニメーションを作るまでやってみたのですが...
416 :
login:Penguin :04/03/16 21:55 ID:IRXVaMIp
絵が書いてある GdkPixmap の一部に、別の絵を張り付けようとしてます。 その時、もとの絵が透けて見えるようにしたいのですが、どのようにすれば いいんでしょう? gdk_pixbuf_render_to_drawable_alpha なんかが使えるのかと思ったら alpha_mode : Ignored とか obsolete とか書いてあり、違うようですし・・。
417 :
login:Penguin :04/03/17 23:13 ID:+5aLOVRA
gtk+2.4揚げ
418 :
login:Penguin :04/03/18 10:09 ID:XRV/eX8E
label1 = gtk_label_new("111111\n22222222\n33333333"); gtk_misc_set_padding(GTK_MISC(label1), 20, 0); とかすると 111111 22222222 33333333 になるんだけど 11111 2222222 3333333 のように1行目のみpaddingする方法無いですか? できれば1.2で…
1つのラベルに複数行書くのはどうかと思うのだが…
え、まじですか。そういう事だったんですか。しょぼーん。
>>418 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_RIGHT);
ということ?
gtkmm(gtkmmに無ければgtk2, gtk)でデータベースに接続するにはどうすればよいのでしょうか ドキュメントを見てもそのような物は無さげです。 よろしくです。
>>422 データベースへの接続とgtkとは関係ない。
考えてみればそうですね データベース側で提供されているライブラリを使うのですね PHP見たいな感覚で、もしかしたら用意されているのかなぁ と思ってしまいました
>>424 スレ違い気味だけど、GNOME-DB Projectでlibgdaというライブラリを
メンテナンスしてるので、それ使うといいかも。ただC++ bindingsは
良さげなものがなさそう。libgdammは古いのしか見当たらないし、
Intiにはまだ入っていないし。
そういえば、IntiのViewCVS見てみたけど、Inti-sourceviewと Inti-GLが見当たらない(汗
>>425 ありがとうございます。
libgda見たけど英語の壁が(T_T)、使い方もわからねぇ
データベース側で提供されているAPI使ってみます。
428 :
416 :04/03/22 23:36 ID:t6oDHj5H
自己解決した。 pixbuf はアルファチャンネル持てました。
このスレみてる神さま、GTK2のぶあつい本をかいてください。おながいします。 というか、誰か執筆してるの?
このスレみてる神さま、Gtkmm2の本もかいてください。おながいします。
>>431 GGADて何ですかいのぅ
検索かけても、よう解らん
ありがとう でも、C++が好きなので・・・ gtkmmは思いっきりC++してる。 英語のチュートリアルと格闘中、少しずつ解って来た
GGADはGNOMEが1.0だったか1.2の頃のものなので内容が古すぎなのが難点。
C++ 好きなら Qt の方が……(ゴホンゴホン
>>437 Qt好き(というかgtkmmは触ったことない)なだけで別に有利と思って使ってるわけではない。
あくまで個人的な意見だけど。例えば
>so that Qt classes can not be used easily with non-Qt classes.
については他のライブラリと組み合わせたとしても、Qtで組むのはMVCな構造ならViewの部分だから
View(Qt)がModelの(C++な)クラスを使うことはあっても逆はないから特に気にならない。
>In Qt, Containers and Layouts are separate classes, and child widgets must be added to both.
というのもレイアウトにはQtDesigner使えるしあまり関係ない気がする。
逆にgtk+なアプリでgtkmm使ってる例の方が少ないと思うんだけどどうしてなんだろう。
ライセンス的にもGPL至上主義者以外にとっては有利なはずなんだけど。
とか言いつつちょっとgtkmm使ってみようかとは思ってるんだけど。
(素のgtk+はやる気が起きない...)
>>438 なるほど、参考になったっす。
GTK使ってて直にC使う人が多いのは、まー惰性というか、文化ってやつじゃないでしょうか。UNIX環境では一番メジャーな言語でしょうから。
自分も、gtkmm使ってC++でやった方が効率的にできるんではないかと推測するんですが…
# C++自体に下手に深入りしなければ :-p
gtkmmを使ってる比較的メジャーなプロジェクトってないですかね。自分は寡聞にして存じません。
これも前どっかで書いたけど、Owenが以前言った(らしい)とおり、C以外の言語で開発したメジャーなGTKアプリがどんどん出てきて欲しいです。
C MAGAZINEの2002年11月にQtの記事が出ていたので Qtを覚えてみようかと思ったけれど プログラムやライセンスなどに制約がありそうなのでgtkmm2にした gtkmm2はあまり使われていないのですね 日本語で解説したホームページが一件だけで悲しい。 ウイジットの大まかな解説だけでもあればだいぶ違うのに 英語のチュートリアルはなかなか大変
おたずねします。 Glib::ustringをstd::stringやchar*に変換するにはどうしたらいいのでしょうか 教えてください。
443 :
login:Penguin :04/04/05 22:28 ID:y/kEmNyL
age
444 :
login:Penguin :04/04/06 00:03 ID:GZxyDVkQ
自己解決しました const char* Glib::ustring::c_str ( ) const というのを見逃してました。
GTK#って日本語通る?
ここ見にきてる人ってどんなアプリ作ってるの? google で検索してみても gtk でアプリ作ってるっていう日本語のサイト はあまりない気がするし・・。古いの多いし・・。
447 :
login:Penguin :04/04/07 01:30 ID:fxxNRgLA
448 :
login:Penguin :04/04/09 09:22 ID:E9wQ2At3
>448 ネタ的に古かったので削除していたのだが、一応、復活させときました。
>>440 > gtkmmがgtk+ほど使われない理由の一つは単純に入れるものが増えて
> マンドラケってことじゃないかな。それはGARNOME使えや、ゴルァ!
> とか言いたくもなるけど。
GARNOMEっつーか、distroでパッケージ用意してもらうほうが先な気がする。
まぁGNOME Platform Bindingsに少し期待。
> Inkscape
>
http://www.inkscape.org/ …
> はgtkmmを使っている。
ダウト。
最初に手を出したのは、ファイルマネージャだった。
結局たいしたものにならず、音楽ファイル選択アプリと化してる・・。
>>448 gtk2化。期待してます。
>>451 CxplorerのGtk2化が終わったら、それを題材にやろうかと思っています。
gtk_file_selection_new で出てくるセレクタに g_locale_to_utf8 って噛ませられるの? 日本語ファイル名が使えないのをなんとかしたいんだけど。
fedra (UTF8環境)で、何もしなくても表示・選択できてます
>>455 それはシステム自体でファイル名にも UTF-8 使ってるからだと思います。
従来の EUC-JP な環境用になんとかしたいんですが、やはりアプリ側では
なんともならないのでしょうか?
>>454 エラーメッセージに出てるように、環境変数 $G_BROKEN_FILENAMES を指定すると
日本語の表示はできてるようだけど、他への影響あるのかな?
やってみた?
外部アプリケーションからGTKアプリケーションに対して あるトリガを与えてやり、それを受けたGTKアプリが 自分の表示内容を変更ということをしたいのですが どうすれば良いでしょうか? 具体的には、あるデバイスの状態を監視する常駐アプリがあって デバイス状態が変化したら、そのアプリが複数のGTKアプリに作用し 内容を変更させたいです。 また、複数のGTKアプリ達に同期をとらせるという意味もあります。 linuxのシグナルを使っても良いかと思ったのですが GTKアプリの処理中に割り込まれて、内部状態を更新してしまったら めちゃくちゃになりそうで躊躇しています。 どなたかお知恵をお貸し下さい。 よろしくお願いします。
>>460 GNOME2 がそろそろ広まってきたので、GNOME foundation でデベロッパー向けの
本を作るわ。という話。まずは英語版で、GLib や GTK、および GNOME の API
にるいてのものになるらしい。 ヽ(´ー`)ノワーイ
http://www.nostarch.com/gnome_toc.htm によると
Chapter 1: GLib
Chapter 2: GObject
Chapter 3: GTK+
Chapter 4: The GNOME Libraries
Chapter 5: Glade and libglade
Chapter 6: Additional Software Development Tools
Chapter 7: GConf
Chapter 8: GnomeVFS
Chapter 9: Where to Go from Here
Appendix A
らしい。Bonoboが独立した章がないのがちと気になるが、GNOME Platform
に関しては一通り網羅しているのではないかと思われる。
463 :
login:Penguin :04/04/29 00:23 ID:zLrJuv9t
(*^.^*)
464 :
login:Penguin :04/04/29 13:25 ID:AQIokWzV
Linux上でWindowsバイナリをコンパイル出来ませんか?
関数 g_strdup_printf などは「必要なくなりしだい解放してください」と 指示されているのですが、自作関数中で その値を return で返したいときは どのようにしたらよいのでしょうか?
>>465 returnをもらった側で処置するべし。
467 :
465 :04/05/04 07:40 ID:gonpR3ix
>>466 ありがとうございます。さっそく、組み込んでみようと思い、以下のように
してみましたが、これで大丈夫でしょうか?
よろしければ添削お願いします。m(_ _)m
/* g_strdup_printf の返り値を返す関数(失敗時は NULL を返す) */
gchar *use_g_strdup_inside(void);
void hoge_callback(StructData *struct)
{
if (struct->filename != NULL)
g_free(struct->filename);
struct->filename = use_g_strdup_inside();
}
gint main_process(foo bar)
{
StructData *struct = g_malloc(sizeof(StructData));
(略:struct の参照渡し)
gtk_main();
g_free(struct); /* これで struct->filename も一括解放? */
return 0;
}
ああ、全角スペース使うんだったorz
>>467 いわゆるC FAQの7.23と7.24を読んだら?
(ちなみにglibのソースをみたらg_freeは標準のfreeをよんでるだけですた)
ついでに 1.30も読んだ方がいいかも
>>467 g_free(struct)でstruct->filenameのポインタは解放されるが、そのポインタの指し示す先までは解放してくれない。なので
g_free(struct->filename);
g_free(struct)
という手順を踏む必要がある。
471 :
467 :04/05/04 11:57 ID:gonpR3ix
>>469-470 ご回答ありがとうございます。
C FAQ 勉強になりました。さっそく struct の宣言の次で
struct->filename = NULL;
と初期化するようにしておきます。
どうせならglibのソースも読んでみるといいかも。
GtkItemFactory を使って
http://www.kitanet.ne.jp/~asler/linux/gtk/ja/gtk_tut_ja-13.html#ss13.4 に例示される方法でメニューを作成したのですが、
以下のようなメニューのコールバック関数
callback_example(gpointer data, guint action, GtkWidget *widget)
を作り、その中で gtk_widget_get_toplevel(widget) をしても、
メニューを含包しているトップレベル・ウィンドウを返してくれません。
また、gtk_widget_class_path(widget, NULL, &path, NULL) でつながりを調べると、
例の中にある menubar では、GtkWindow.GtkVBox.GtkMenuBar となりますが、
上記コールバック関数では、GtkWindow.GtkMenu.GtkImageMenuItem となり
思ったとおりに継承(?)していないようであることがわかりました。
そこで、これら2つのウィジェットを
GtkWindow.GtkVBox.GtkMenuBar.GtkMenu.GtkImageMenuItem
のような感じに接続することはできないでしょうか?よろしくお願いします。
>>473 クリックした時に出てくるメニュー部分って、メニューバーやその親とは
直接関係のない独立したウィンドウになるので、無理と思われ。
なので、callbackには別の方法で情報を与えることになるでしょう。
例えば、gtk_item_factory_create_items()の最後の引数として与えた
ポインタが(例ではNULLになっている)、callback関数の最初の引数
dataとして得られます。使ったはことないけれど、
gtk_item_factory_create_items()の代わりに、メニューのアイテムの
数だけgtk_item_factory_create_item()を使えば、メニューアイテム
ごとにcallback引数を変えられるかもしれない。
が、一番の問題は、GtkItemFactoryがGTK+-2.4ではdeprecateされ
てしまっていることかもなー。
>>474 根本的に無理なわけですか・・・。
deprecate の件もイタいですが、当面の互換性を優先して
細々と工夫して使っていきたいと思います。
ご回答ありがとうございました。
476 :
login:Penguin :04/05/13 04:33 ID:d+lRJudN
g_strsplitでseparatorに0x01を指定したいんですが、 どうやって表記すれば良いのでしょう。 g_strsplit(in,0x01,-1)や(in,"^A",-1)では warning: passing arg 2 of `g_strsplit' makes pointer from integer without a cast と怒られてしまいます。
>>476 g_strsplit(in,"\1",-1)
だと思うのだが・・。
478 :
476 :04/05/13 14:03 ID:d+lRJudN
>>477 ありがとうございました。
ばっちりでした。
って言うかC言語を基本から勉強しないとだめっすね。
くだらない質問ですいません。 垂直スケールウィジェットを作成すると、上が最小値で下が最大値になるのですが、 一般的な感覚って下が最小値で上が最大値ですよね? 逆にすることはできないのでしょうか?
gtk_range_set_inverted()あたりは試した?
481 :
479 :04/05/13 23:20 ID:QSU6qp6Q
>480 ありがとうございます。 絶対逆にする関数があるはずだと思っていたのですが、探し当てることができずにいました。 たすかりました。
482 :
login:Penguin :04/05/16 23:55 ID:irWPIKTr
リファレンスマニュアルにはシグナルの一覧とコールバックの型なんかは書いて あるけど、そのシグナルがどんな時に出るか書いてないみたいです。 名前からわかるのはいいのですが、そうでない場合にシグナルがどんな時に出るかを 調べるにはどうすればいいんでしょう? 今は、全てのコールバック関数を書いてみて試したり、ソース読んだりしてますが、 遠回りしてる気がするんです・・。
483 :
login:Penguin :04/05/20 14:27 ID:76aPgkOx
本当にそうだと思う チュートリアルのサンプルプログラムを見て覚えるしかないのかなぁ
本当に本当にそうだと思う。 いま、gtkを使い始めたがそう感じたよ。 と言いつつも俺の探し方が甘そうなのでsage
ならキミが調べた結果を本にまとめて売り出せばウハウハなんじゃねーの?
GTK+(Glade)でGUIアプリを作成しています。 作成したアプリのアイコンを設定したいのですがどうすれば良いのでしょうか? また、アイコンのフォーマットは*.icoとかをそのまま使えますか?
質問です。 GTK+ 1.2をつかっていろいろ試しているところなのですが、 ScrolledWindowをつかうとマウスでぐりっとやるとウィンドウがスクロールしてくれます。 でも、PageUpとかPageDownなどキー操作ではスクロールしてくれません。 どうすればいいですか? どの辺を調べれば良いかキーワードだけでも教えてください。 よろしくお願いします。
>>488 GtkWidget の key_press_event でどう?
490 :
488 :04/05/31 18:31 ID:0eRi0Au3
>>489 お返事ありがとうございます。
そして、舌足らずでごめんなさい。
key_press_eventを使うというのは分かるのですが、
そのハンドラの中に何を書いて良いか分からないんです。
ScrolledWindowの関数の中に上にスクロールするとか
そういうの無いみたいなので…
出来の悪い子でホントにごめんなさい(つдT)
492 :
488 :04/06/01 12:17 ID:b9B2HGyQ
>>491 ありがとうございます。
調べてみます。
Gtkに関して教えてください。 「GTK+入門 基礎から〜」を購入して勉強しているのですが、 下記のプログラムで「gtk_widget_set_size_request」を 実行しようとすると「undefind referenec to 'gtk_widget_set_size_request」 とエラーが表示されてしまいます。 コメントアウトすればエラーは出ません。 gtk/gtk.hもインクルードしてありますし何が悪いのかさっぱり分かりません。 window = gtk_window_new( GTK_WINDOW_TOPLEVEL );↓ gtk_widget_set_name( window, "window" );↓ gtk_widget_set_size_request( window, 480, 280 );↓
>>493 検索してみたらその本は第2版が出ているようなので、実は古い版だったりしませんか?
gtk_widget_set_size_request()は1.0→1.2で削除されたような覚えがあるので、
gtk_widget_set_usize(), gtk_widget_size_allocate()あたりで代用してみるとか。
496 :
493 :04/06/01 16:41 ID:sWrdsXk5
>> 494, 495 有り難うございます。 gtk_widget_set_size_request()→gtk_widget_set_usize()にしたらエラーは出なくなりました。 495さんに教えて貰ったページを見ると、 私の英語力ではgtk_widget_set_usize()を止めて、 gtk_widget_set_size_request()に変更しろと 書いてあるように思うのですが・・・
>>493 gtk_widget_set_size_request() は gtk+-2.0 で新しくできた関数。
gtk2 のリファレンスを見ながら、gtk1 を使ってプログラム
してると思われる・・・。
統一しる! 変なこだわりがないなら gtk2 に・
498 :
488 :04/06/01 21:30 ID:6DgPX5ay
>>491 先生!出来ました!!
gtk_scrolled_window_get_vadjustment と
gtk_adjustment_set_value
ですね。ありがd。
>>487 tar xzvf 素酢-x.x.x.tar.gz
cd 素酢-x.x.x/src
grep icon *
いちおう。
500get
501 :
login:Penguin :04/06/06 04:10 ID:XtA0mCdQ
3日と16時間23分、誰も取ろうとしなかった500ゲトおめ(w
502 :
login:Penguin :04/06/06 10:31 ID:YeSwYVrz
GtkComboで今何番目のリストが選択されているかを知るにはどうすれば良いのでしょうか? 1個目→A 2個目→B 3個目→C となっていて、2個目が選択されている場合に「B」という文字ではなく、 「2」という数値を取得したいのです。
GList の中から文字列を検索するのはどうよ? GList は要素を指定してその位置を返す関数があったような気がする。
504 :
502 :04/06/08 14:03 ID:PyaDVVHB
レス遅れてすいません。 教えて貰ったことを踏まえて、 色々調べたり悩んだりしたのですが、 結局力業で処理してしまいました。
505 :
login:Penguin :04/06/23 23:57 ID:MDTSH8fN
GTK+/GDKによるLinuxアプリケーション開発 Eric Harlow著に載ってるソースコードって どこからかダウンロード出来るのでしょうか? 記載されてるページへいってもNOT FOUNDなもんで、、、
507 :
login:Penguin :04/06/26 02:07 ID:ot6kutpS
>>507 ,508
DLできました。
有り難うございました
510 :
login:Penguin :04/07/01 14:49 ID:2+uzpSCS
511 :
login:Penguin :04/07/02 20:41 ID:ruSxXmGR
Labelの色を指定するのはどうすれば良いのでしょうか? リソースファイルではなくてプログラム中で変更したいのです。 同じラベルに対してokなら青errorなら赤みたいに。
label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL(label), "<span foreground='red'>red</span>"); では?
514 :
511 :04/07/02 22:06 ID:ruSxXmGR
>>512 おおお、こんなに早くレスがつくとは思いませんでした。
gtk_widget_set_colormapあたりかと思って悩んでました。
ありがとうございました。
515 :
login:Penguin :04/07/17 01:44 ID:gxRBMExw
gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(KeyPress), NULL); でコールバック関数を登録し、 static void KeyPress(GdkEventKey *event) { g_print("%x\n",event->keyval); } } これで押されたキーを判別しようと思ったのですが 実行結果はどのキーを押しても 0 と表示されてしまいます。 何か使い方が間違っているのでしょうか? それとも、仕様ですか?
516 :
515 :04/07/17 01:45 ID:gxRBMExw
↑ 余計な閉じ括弧がひとつありますが、書き込み時に間違えて入力してしまったものです。 気にしないでください。
517 :
515 :04/07/17 02:05 ID:gxRBMExw
自己解決しました。 お騒がせしました。
518 :
login:Penguin :04/07/20 21:04 ID:mCNuObfQ
X11^^^^
519 :
login:Penguin :04/07/21 13:46 ID:q4gHD8Am
質問です。 gtk_widget_refってどういう目的で使うのでしょうか。 glade使うとwidgetをcreateした後に必ずついてくるんですが gtk_widget_refを使わないでcreateするだけだと 何かまずいことが起こるんでしょうか。
>>519 >glade使うとwidgetをcreateした後に必ずついてくるんですが
>gtk_widget_refを使わないでcreateするだけだと
>何かまずいことが起こるんでしょうか。
glade 使うと gtk_object_set_data_full してるからgtk_widget_ref
は、おいといたほうが良いと思う。
起動から終了までの間にウィジットを破棄したりしないなら gtk_widget_ref
は不要とか言うのは無謀かな?よくわかってないけど。
521 :
login:Penguin :04/07/31 10:39 ID:MPOS1TDH
Window全体に影を付けたいのですがパッチとかないですか?
1はいずこ...
GtkGLExtの日本語マニュアルは無いのか…まぁ訳すけれど… 作者日本人だよな。なんか複雑。
>>523 日本語だと解説やマニュアルどころか、情報自体がないな・・・。
どころか、英語でも状況はかわらなさそう・・・。
使ってる人いるのか?と思ってしまう。
526 :
login:Penguin :04/08/29 01:43 ID:I8sIe2mZ
Gtkのイベント(シグナル?)についてお聞きしたいのですが、 独自イベントを作ってgtkのメインループの中でハンドリングするには どのようにコーディングすればよいのでしょうか? よろしくお願いします。
スクロールバーが付いたテキスト入力の領域を作るにはどうすればいいのでしょ
うか?
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
でscrolled_windowを作り,
text = gtk_text_new(NULL, NULL);
でテキストウィジェットを作り,
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), text);
としてみましたが,スクロールバーが一杯になっていて全くスクロールできません.
http://www.gnome.gr.jp/docs/gtk+-2.0.x-tut/gtk-tut.html こことかを見てみましたが,一行入力のテキストエントリしか書いてなかった
のでわかりませんでした.この方法ではできないのでしょうか?初歩的な質問
ですみません.
>>527 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
529 :
527 :04/08/29 23:43 ID:0ci6kHoF
できました!ありがとうございます.
530 :
login:Penguin :04/09/02 19:50 ID:UwBORxvn
windowをマウスで左クリックしたら「クリックしたよ!」というメッセージを出すプログラムを 書こうと思い、eventの中からマウスで左クリックしたeventを取り出して標準出力するつもり のプログラムを書いたのですが、意図した通りに動いてくれません。おそらくイベントハンドラ のところがおかしいのでしょうが、どのように書けばよいでしょうか? --------- #include<gtk/gtk.h> #include<stdio.h> static gboolean click_event(GtkWidget *widget, GdkEventButton *event, gpointer data){ if(event->type==GDK_BUTTON_PRESS && event->button==1){ g_print("Mouse clicked! \n"); } return FALSE; } int main(int argc,char *argv[]){ GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "event", G_CALLBACK(click_event), NULL); gtk_widget_show(window); gtk_main(); return(0); }
531 :
login:Penguin :04/09/02 21:27 ID:B1qwsflf
>530 Xlibをインクルードしていないじゃないか。 それではメッセージは受け取れないな。
>>530 window でマウスのイベントを取ってどうするんだ、というのは置いといて・・。
window のイベントマスクを設定する。
533 :
MyDoom被害経験者(当時は深刻) :04/09/06 00:41 ID:vttGuatR
GtkとKDE/Qtでは、どちらがGUI programmingを始め易いんでしょうか? コード量の少なくて済む方を教えてください。
>>533 お手軽なほうがいいってんならTcl/Tkやっとけ。コード量少なくてすむぞ。(藁
それぞれのサンプルコード見てこっちが性に合ってるな、とか、KDEメインに使ってるからQtとかないのかね。
どっちにしたってGUIプログラミングする分にはコード書くし、量的に差があるったって鼻毛みたいなもんだよ。;-p
CがいいかC++がいいかで選んだら?
サポートしてる言語がやたら多いのはGtk+。 C++, Python, Ruby, Perl, Scheme, Tcl, PHP, Java, C#, OCaml, Haskell みたいに 実用一辺倒から Research Language までいろいろ。 ただ完成度やドキュメントの整備状況は言語でまちまち。 Qt はその仕組み上そういうバインディングが作りにくいそうな。数少ない バインディングも Qt2 にしか対応して無いのが多い。
Gtk+はバインディングが充実してるものの情報が少ない、ともいえる。 また、CがデフォなだけにC++でさえ情報が少ないっつーのが難点。 Qtのバインディングで実用レベルなのはPythonくらいだが、これは結構 情報も多くしっかりしてる。 両方やってる感じでは、言語で選ぶならC++かPythonならQt、それ以外 ならGtk+ってのが妥当だと思う。もちろんツールキットにあわせて言語 を選ぶなら好きにしてくれってことだが。
あと、あまり気にしないとは思うがシェアウェア化とか商用にするのなら Qtはライセンス購入が必要になる(QPL) 厳密にはGtkもGPLなのでオープンソースが義務付けられたり、色々あるんだが… オレ的ルールを使用する会社等は「ライブラリの改変をしなければ使いたいホーダイ」という有様。 何の為に勉強しているかは知らないが、オレの勝手なイメージでは Gtk: オープンソースしていいクリエーター 一般的な研究者 小中企業 Qt: コアな研究者 大企業 が使用している。 あと勘違いしている人が多かったんだけれど、 どちらも英語の読解力は必要(Linuxをやっていたら常識とは思うが) Gtkを表面だけ理解するなら日本語のドキュメントだけで事足りる。 Qtは最初から英語のドキュメントとにらめっこすることになる…かもしれない。
Gtk+ は LGPL なので商用ソフトウェアも開発可能ですが
541 :
login:Penguin :04/09/07 22:03 ID:/BPz6lrP
ウインドウをクリックしたらそのウインドウサイズを取得したいのですがどうすればできますか?
>>541 クリックで起動されたコールバックの中で gtk_window_get_size
543 :
login:Penguin :04/09/07 22:43 ID:/BPz6lrP
544 :
login:Penguin :04/09/07 23:54 ID:4Dablgl8
Gtkにラッパーとかかませて、UNIX(LINUX)とC/C++でWin32のようなプログラミングできるようにした環境って ないのかな。 (つまりCreateWindow〜CALLBACK WNdProc〜GetMessageのような流れで作る環境)
gtkmmでは不満?
マルチプラットフォームを考えてるならwxWidgetかな。
>>544 そりゃあ、無いでしょ。Windows上ですら、制作者はWin32 APIを直に使って
アプリケーションを書きたいなんて思わないんだから。
>>546 UNIX USERの特集で興味が沸いたんだけど、
他に書籍か雑誌の資料で良いのないかな?
>>548 とりあえずム板ののひょーんスレでも覗いてみたら?
550 :
login:Penguin :04/09/08 15:23 ID:wSTR0Xhj
GTK2のプログラムをライブラリ化しようとしてautomakeやautoconfを使ってconfigureを作ろうと したのですが、 gtk/gtk.h: そのようなファイルやディレクトリはありません というエラーがでます。自分の手でMakefileを書いた時にはこんなエラーは起きなかったのですが Makefile.amやconfigure.acに何か特別に書かなければならないことがあるのでしょうか?
551 :
550 :04/09/08 17:39 ID:wSTR0Xhj
自己レス できた。三時間ぐらい調べるのにかかってしまった。。。 configure.acに AM_PATH_GTK_2_0(2.0.0,, [AC_MSG_ERROR(Test for GTK failed.)]) とか書いてやると、ライブラリパスやらヘッダパスやらがGTK_CFLAGSやGTK_LIBSに定義される。 それをMakefile.amに INCLUDES = @GTK_CFLAGS@ LIBADD = @GTK_LIBS@ と書けばOK。GTKの他にgtkglextとかを使いたいのなら/usr/share/aclocalにあるgtkglext.m4の しょっぱなにあるコメント欄を見て、GTKと同じようにマクロを呼び出してMakefile.amにパスを書き込む。
PKG_CHECK_MODULES() もあり。
554 :
546 :04/09/09 06:22 ID:krUgg33f
>>548 wxWidgetsのソースをダウンロードすると、
たくさんのサンプルがついてるので、それが結構参考になると思います。
中には古いのがあったりするのですが、大よその概念はつかめると思います。
米AOLのインストーラーとかに使われてて、Windows/Linux/Mac OS Xでいけてるみたいなので、
商用レベルにはなっていると思います。
華麗に555げっと。
widget やシグナルのことを知りたくて、The Glib Object system っていう チュートリアルを読んでるんですが、くじけそうです・・。 gtk のチュートリアルと Glib Object systemのチュートリアルの間を埋める ようなレベルの説明って、どこかにないでしょうか? 以前、GTKハッキングレポート っていうそれっぽいページがあったと思ったんだ けど、今探すとなくなってるみたいだし・・・。
557 :
煽りイカ :04/09/15 02:24:11 ID:S7MStXnB
Gtk+はANSI-C言語、QtはC++言語でライブラリが用意されていると言う 解釈でよろしーでしょうか? オブジェクト指向で開発する場合には、後者の方が使い易いんでしょーか? GtkのマニュアルをPC上で読んでいたら目眩がしてきたので、KDEのように 本になって出てないでしょうか?あったら買いたいです。
558 :
login:Penguin :04/09/15 03:05:40 ID:VtuDal+L
559 :
556 :04/09/15 17:57:59 ID:XXdKtByK
>>558 いいサイトをありがとん。
>まぁ自前のWidgetというかオブジェクトを作るとかし
人のプログラム見てて、まさにこれをしてたので調べてます。
気がつくと gobject のソースの中で遭難中。
560 :
煽りイカ :04/09/15 22:46:48 ID:S7MStXnB
>558 有り難うございます。
561 :
login:Penguin :04/09/30 18:40:47 ID:ZNjn4MmY
質問です。 必ずウィンドウ上の何れかのウィジェットがフォーカスを持っているようにしたいのですが どうすれば良いか分かりません。 例えば、1つのボタンを貼り付けただけのウィンドウを作ったとします。 これを実行してタブを押すと、そのたびにボタンがフォーカスを得たり失ったりします。 ボタンがフォーカスを持っていないときはいったい誰がフォーカスを持っているのでしょうか? あるいは誰も持っていない状態というのがある? どちらにしても、この状態をなくすにはどうすれば良いのですか。 教えてください。
>>557 Qtはいいぞぉ。あそこまで洗練されたライブラリは
そうそうあるもんじゃない。
>>561 何もしなくてもそんな状態じゃないけど…
564 :
561 :04/09/30 20:50:54 ID:9AhHdXeZ
>>563 書き忘れていたんですが、1.2の話です。
2系だと平気なんですね、きっと。
>>564 ウィンドウウィジットの GTK_CAN_FOCUS フラグを落す。
バージョンによって違うとは…。
566 :
561 :04/10/01 10:45:06 ID:TSUAcXDI
>>565 だめですた。 orz
でも、ありがとうございました。
もうちと、自分で試してみます。
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GTK_WIDGET_UNSET_FLAGS(window, GTK_CAN_FOCUS);
電光掲示板みたいに文字が流れる プログラム作りたいんですが 参考になるソースしりません? バージョンはGtk+2.2 です
569 :
364 :04/10/02 23:52:42 ID:lvcJFuth
「電光掲示板みたいに」が、ドットもそれらしく表現ということだと GdkPixbufあたりをつかって自前で画像を描画することになるかと。 いったん文字をDrawableに描画してgdk_pixbuf_get_from_drawableで イメージを取得するとか。
>>569 ありがとうございます。
さっそく、それらしいソースあさってみますね。
描画ソフト関係をあされば大丈夫かな?
571 :
login:Penguin :04/10/03 22:52:41 ID:b13aFboP
質問お願いします。 テキストエントリを使って、文字列を取り込みたくて const char *str = gtk_entry_get_text(entry); wcahr_t wstr[100]; mbstowcs(wstr,str,100); としたのですが、テキストエントリに"aaa"と入力して取り込むと正常に wstrの中身が"aaa"となるのですが、"あああ"と入力して表示させると 文字化けが発生します。 mbstowcsの返り値を調べると-1になっているので正しく変換できてないと 思われるのですが。 もしかしたら、テキストエントリは2バイト文字は扱えないのですか? どなたか教えてもらえないでしょうか。
setlocaleとか実行してるか?
573 :
571 :04/10/03 23:22:17 ID:b13aFboP
>>572 はい、setlocale(LC_ALL,"ja_JP.eucJP")とやっております。
gtk_entry_get_textの返り値はUTF-8ではないかと。 それをEUCモードのmbstowcsで実行するからエラーになると。 setlocaleでUTF-8を設定するか(これは他の関数で面倒なことになりそう) g_locale_from_utf8でUTF-8からカレントロケールに文字列を変換するか。
575 :
571 :04/10/04 00:04:10 ID:5lyoB5Xl
>>574 なるほど、そういうことでしたか。
私の作っているプログラムではeuc形式のファイルからの文字列の
読み込みもやらなければならないので、後者の方でやってみます。
アドバイスありがとうございます。
576 :
login:Penguin :04/10/04 00:14:40 ID:1mgqe0pP
>>571 char *str = gtk_entry_get_text(entry);
char *locale_str = g_locale_from_utf8(str);
wchar wstr[100];
wprintf("%s", wstr);
wbstowcs(wstr, str, 100);
strの中身はUTF-8 まんまなので
まずiconvなりglibの文字列変換関数(実質iconvのラッパ)で適当に変換する
577 :
login:Penguin :04/10/10 18:05:08 ID:zn9N0S8U
GTK+ 2.4.11 Released
578 :
login:Penguin :04/10/13 08:07:25 ID:0RBMkwen
gtkはCで書かなきゃいかんのがめんどい
C++がいい
ウィンドウのタイトルを右クリックするとメニューが出てくるように、 ウィンドウマネージャで設定されています。 この時、gtkで一部のウィンドウのメニューを違うメニューにしようと思ったのですが、 _GtkWindowにも_GdkWindowにも操作できるような要素が見当たりませんでした。 どなたかメニューを操作する方法をご存知の方いらっしゃいませんでしょうか・・・
ウィンドウタイトルの所で出るメニューは、作ってるアプリの管轄外だと 思うんだけど。違う?
ウィンドウタイトルないウィンドウマネージャもあるしね。 もし可能だったとしてもアプリケーションが操作すべき場所じゃないと思う。
Tutorialみてbutton押すとlabelの表示が変わるぐらいは出来るようになったのですが、 gtk_label_set_text(GTK_LABEL(label), "test1"); sleep(1); gtk_label_set_text(GTK_LABEL(label), "test2"); みたいに処理に従ってlabelを書き換えるようなのは、 どうすればいいのでしょうか?上のだと、表示されるのはtest2だけで……。
587 :
login:Penguin :04/11/09 06:18:13 ID:t6yHsCJv
>>586 #!/usr/bin/env python
import pygtk; pygtk.require('2.0')
import gtk, gobject
count = 0
def greet(widget): print 'Hello!'
def deal_timeout(button):
global count
count += 1
button.set_label(str(count))
print button
if count < 10:
return True
else:
return False
button = gtk.Button(str(count))
button.connect('clicked', greet)
#timer = gtk.timeout_add(1000, deal_timeout, button)
timer = gobject.timeout_add(1000, deal_timeout, button)
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.set_border_width(10)
window.add(button)
window.show_all()
gtk.main()
588 :
login:Penguin :04/11/09 07:49:39 ID:t6yHsCJv
>>586 >どうすればいいのでしょうか?上のだと、表示されるのはtest2だけで……。
Windowがマップ(show)されるまで、Labelは表示されないよ。
set_textてコールバックのなかでやってる?
589 :
login:Penguin :04/11/09 07:50:30 ID:t6yHsCJv
>>586 ごめん、ボタンラベルではなくだだのラベルを書き換えだね。
それから、pygtkで済まん。
#!/usr/bin/env python
import pygtk; pygtk.require('2.0')
import gtk, gobject
count = 0
def deal_timeout(label):
global count
count += 1
label.set_text(str(count))
if count < 10:
return True
else:
return False
label = gtk.Label(str(count))
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.set_border_width(10)
window.add(label)
window.show_all()
#timer = gtk.timeout_add(1000, deal_timeout, label)
timer = gobject.timeout_add(1000, deal_timeout, label)
gtk.main()
>>587 うっと、その例だと、
count += 1
button.set_label(str(count))
print button
count += 1
button.set_label(str(count))
print button
と二度続けてset_labelしたときに順次表示したいという気持ちで。
591 :
login:Penguin :04/11/09 08:33:34 ID:t6yHsCJv
質問の意図が分かった。 おそらくmainループに制御が帰らないから中間のset_textは 反映されないのだと思う。 mainスレッドと別スレッドでset_textすればうまくいくのでは。 def callback(label): # bigin mainとは別スレッド global count label.set_text(str(count)) count += 1 time.sleep(1) label.set_text(str(count)) # end mainとは別スレッド
>>590 何をしたいのかもっと具体的に書いた方がいいのでは?
593 :
login:Penguin :04/11/10 05:52:19 ID:ppRcKd5W
>>590 これでどう?
別スレッドによる方法は、よした。こちらの方が簡単。
要は、set_textしたあとmain_iterationを必ず呼ぶ。
下のコード参照。
594 :
login:Penguin :04/11/10 05:52:58 ID:ppRcKd5W
>>590 #!/usr/bin/env python
import pygtk; pygtk.require('2.0')
import gtk, gobject, time
def callback(button, label):
button.set_sensitive(False)
for i in range(100):
time.sleep(i%5+1)
label.set_text(str(i))
while gtk.events_pending():
gtk.main_iteration()
button.set_sensitive(True)
label = gtk.Label('-')
button = gtk.Button('Go')
vbox = gtk.VBox(spacing = 5)
vbox.pack_start(label)
vbox.pack_start(button)
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
button.connect('clicked', callback, label)
window.set_border_width(10)
window.add(vbox)
window.show_all()
gtk.main()
gtk2-perlいじってみようと思うんですが、 gtk_hoge は Gtk2::hogeと言うので安直に Gtk2::set_locale(); してみたら Usage: Gtk2::set_locale(class) と出る。とりあえず Gtk2::set_locale('euc-jp'); してみると実行出来るが文字化けなおりまへん。 すみまへんが、どなたかぷりーず救いの手。
>>596 ありがとん。
use utf8;
足してutf-8で書くだけでしたか。
けどこりゃ面倒だな。。。
598 :
login:Penguin :04/12/03 19:00:50 ID:GiyN6pXi
GTK+ 2.4.14 Released
599 :
login:Penguin :04/12/04 18:37:51 ID:6LgKh+yC
厨房な質問ですが教えてください。 テキストボックスに日本語入力できません。 日本語の文字列をコピペしても文字化けします。 gtk_set_locale(); の他に setlocale(LC_ALL,"ja_JP.eucJP"); なども試してみましたが効果ありませんでした。 gtk+ 1.2 なら問題なく日本語が通るのですが、gtk+ 2.4では何か特別なことをする必要があるのでしょうか。 テキストエントリーなら普通に日本語入力できます。 GtkWidget *text; //文字化けする text = gtk_text_new(NULL, NULL); gtk_text_set_editable(text, TRUE); GtkWidget *entry; //文字化けしない entry = gtk_entry_new(); gtk_editable_set_editable(entry, TRUE); FAQに違いないと思うのですが、どう調べても解決できません。 #メモ帳程度ならすぐできると思ったのですが、そんな甘いものではないのですね。
601 :
599 :04/12/04 21:48:41 ID:6LgKh+yC
text = gtk_text_new(NULL, NULL);
ではなく、
text = gtk_text_view_new();
でやってみたら、日本語が使用できました。
gtk_text_new はもしかしてobsolete ?
>>600 参考になりました。(難解すぎてあまり理解できませんでしたが)
マニュアル読みながらやってないのか? 1.2 から 2.0 になる時にけっこう 変わってるよ。 Warning GtkText is deprecated and unsupported. It is known to be buggy. To use it, you must define the symbol GTK_ENABLE_BROKEN prior to including the GTK+ header files. Use GtkTextView instead.
603 :
login:Penguin :04/12/08 13:42:17 ID:s2a0TgVZ
質問です。 画像ファイルを表示させたいのですが、pgm形式の出力の方法がわかりません。 xpmしか出力できないのでしょうか?
>>603 >xpmしか出力できないのでしょうか?
gdkpixbuf でたくさんのフォーマットに対応してるが、 pgm が対応してるか
どうかはしらん。
GTKを使ったアプリケーションを作ってみたいと思っているんですが、 おすすめの入門書などはありますか? 当方、VisualStudio+C言語+Win32APIならたいていの物は作れる程度の知識ですが、 Linuxは初心者です(´・ω・`)ショボーン >「GTK+・GDKによるLinuxアプリケーション開発」 近所にこんな本があるんですが、どんなもんでしょうか。
最新のGTK+に対応してる本がよさげ。
608 :
603 :04/12/09 12:34:15 ID:wvxh3lvA
>>604 ありがとうございました。おかげで解決できました。
610 :
login:Penguin :04/12/17 15:43:49 ID:+/93qx7Y
gtk+ 2.6.0
ショートカットとして "Shift+Ctrl+a" というキーを割り当てるには どうすればよいでしょうか? gtk_widget_add_accelerator の第5引数に GDK_SHIFT_MASK|GDK_CONTROL_MASK というように指定しても、コンパイルで invalid conversion from `int' to `GdkModifierType' と怒られてしまいます。
612 :
login:Penguin :05/01/10 03:15:43 ID:lP2Bwze9
>>613 おおっ!
build-cross.shを試してみようと思うのですがこれってPREFIX変えれば
rootにならなくても動きます?
615 :
614 :05/01/31 16:16:04 ID:nk2PSUal
>>614 >build-cross.shを試してみようと思うのですがこれってPREFIX変えればrootにならなくても動きます?
自己レス.できました.
>>613 いいっすね.スクリプトもページも勉強になりました.
感謝!
613ですが、libxml2とlibxsltについては、もう少し、入れ方に工夫が必要そうです。自分で *.pcをでっちあげるというのも手かもしれませんが。ということで要研究です。
>>11 > こんくらいの英語がわからんよーじゃLinuxは使えんよ。
Linuxのドキュメントは英文のなかでも難解な部類に属すると思われ
618 :
login:Penguin :05/02/26 01:35:42 ID:ioiQR6vn
日付の書式設定をgettextizeしようと思って、 日付の書式をstrftimeに渡す前に g_locale_from_utf8 で utf8な文字列に変換してから渡してるんだけど、 何故か g_locale_from_utf8 が0x0な値しか返してくれません。 こんな感じの処理がしたいんだけど、 1.const で _("%B %Y") と書式を指定 2.po には "%B %Y年" と記述 3.g_locale_from_utf8 で文字コードを変換 4.strftime の format に上記を指定して日付をゲト もしかし po で変換されて帰ってくる文字コードってutf8固定じゃないのかな??
panedの素婦りったのサイズの取得方法をご存じの方、ご教示ください。
>>618 bind_textdomain_codeset() で UTF-8 を指定していますか?
デフォルトでは locale encoding で返ってきます。
621 :
618 :05/02/28 22:17:53 ID:IaK5xt0q
>>620 ソースを見たら、bind_textdomain_codeset(EPN, "UTF-8"); となっていました。
色々試してみた結果、一旦「poに日本語訳の無い書式」を選んでおいて、
その後に「日本語訳の有る書式」に切替えると、一旦は正常に反映されるんだけど、
アプリを終了して再起動しようとすると SEGV を起こしてしまいます。
一旦は正常に動作することから、const で記述した文字列を gettextize している部分で、
メモリの確保が上手くいってないような気がしてきました。
どうやって確認したら良いんだろう…。
>g_locale_from_utf8 で >utf8な文字列に変換してから渡してるんだけど、 g_locale*_to*_utf8じゃないと「utf8な文字列に変換」はできねえんでねえかい
623 :
618 :05/03/01 19:23:49 ID:4zQ3kAWS
>>622 ごめん。書き間違った。
(誤)g_locale_from_utf8 で
(正)g_locale_to_utf8 で
ちゃんと書くと、最初に g_locale_from_utf8 でカレントロケールに変換してから、
strftime に渡してやって、結果を g_locale_to_utf8 で再度変換してから
label を作ってます。
gtk でウインドウの x ボタンを押しても閉じないようなウインドウを 作るにはどうしたらいいですか?
>>624 "delete_event" の callback 関数で TRUE を返すようにする。
627 :
618 :05/03/03 21:48:02 ID:Fxm/rLTz
>>623 自己レスです。
MLで聞いたら、_()マクロの代わりにN_()マクロを使えと教わりました。
結局、const 中の メッセージを const char *msg = { N_("hoege")}; に変更しておいて、
あと sprintf(str,"I am %s",msg); を
sprintf(str,"I am ");
strcat(str,_(msg));
とすればOKだった。
全然GTKに関係無かっただよ。スマソ。
628 :
login:Penguin :05/03/14 14:58:26 ID:YLJBAcu4
すいません。 Gdkのgdk_draw_polygonとかの関数で描画する図形の色を 半透明にして表示する事ってできますか? 当方FedoraCore3のGtk2.0で作成中なのですが やり方がわからずはまっているところです。 アルファ値の設定ってどっかでできますかね??? 宜しくお願いします。
629 :
login:Penguin :05/03/14 15:32:30 ID:bODZhmWq
gtk2 でプログラミングしてます。 ボタンやラベルの色を個別二変更できなくて困ってます。 方法をおしえてーーーー! それとフォントの変更も個別にできないんです。
>>628 libgnomecanvas使ったほうがいいかもしれない
633 :
再描画 :2005/03/24(木) 21:33:44 ID:K5TJHYPW
こんばんは、質問いいですか。 gtkとpthreadを使ってプログラムを作ってます。 メインスレッドはgtk_main()に行ってて、 作成されたスレッドの方でWidgetに変更を加えます。 (GTK_LABELの文字を変えたりとか) ところが、変更した時には直ぐに結果が表れません。 マウスポインタがボタンの上に行ったり、他のソフトを起動したりすると 変更されるのですが、放置しておくとそのままーでいてます。 強制的に再描画してみようと思ってWidgetいじった後に system("xrefresh"); してみたら思った通りに動いてくれました。 でも普通は何か別のそれ用の関数を使うんですよね。 何を使えばいいんでしょうか。
gdk_flush() してみるとか
>>633 それはスレッドにする必要があるからそうしてるのか?
gtk_main()に突入したら戻ってこないという理由だけで
スレッド化しているなら、スレッド化せずに
gtk_add_timeout使ってコールバックルーチンのほうで描画するとか。
636 :
再描画 :2005/03/24(木) 22:05:36 ID:K5TJHYPW
>>634 例のxrefreshしている行を
gdk_flush();
で置き換えてみました。
んー、うまくいきません。ごめん。
今、xrefreshのソースを見てみようとxfree86のソースを落としてます。
ナローバンドなので作業は明日になりそう(T-T)
637 :
再描画 :2005/03/24(木) 22:10:39 ID:K5TJHYPW
>>635 ちょっとtimeout使ってみて何か上手く行かなかったから
thread使ってみたんですが、
考えてみればスレッドにする程のもんでもないかも。
もう少しtimeoutで粘ってみる。
繰り返す必要が無いならidle_addの方でもいいのかな。
639 :
再描画 :2005/03/25(金) 00:26:27 ID:i+2vihm2
timeoutで書き直した。成功!!
と思ったら、ボタン(処理を中止するボタンつけてるの)が押せなくなってるっ!
ボタン押しを処理するべきものがお忙し中になっちゃうのかな。
折角情報いただいたのでthreadの方ももう少し粘ってみる。
なんかスレッドっていろいろあるのね。
gdk_flushを手がかりにあちこち読んでみた。
g_thread_init(NULL); を入れたら上手く行った。あれ? flushなくても大丈夫だ。
・・・なんか私、凄く馬鹿だったかも。
>>638 読んでみます。ありがとう。
640 :
再描画 :2005/03/25(金) 00:56:18 ID:i+2vihm2
少し訂正。 [誤] g_thread_init(NULL); を入れたら上手く行った。 [正] g_thread_init(NULL); をgtk_main(); の前に入れたら上手く行った。
641 :
再描画 :2005/03/27(日) 20:09:54 ID:+oexgFcZ
>>638 のページ、参考になりました。
GUIと関係ない部分での同期処理と複数のスレッドから再描画する時の
同期処理(Widgetをとりあわない様にする事)は別だったんだなぁ。
とりあえず完成しました。ありがとう!!
642 :
再描画 :2005/05/01(日) 10:24:56 ID:RRZjWKpR
Linuxでのプログラミング学習です。 こんな問題をいきなり授業で出題されました。 まだほとんど何もやってないので、さっぱり 意味が分かりません。分かる方がいらっしゃるなら、 回答の方教えてはいただけませんか? f(x)=xの2乗-xy-yの2乗 について x=-0.423 y=1 の時の値を(小数点第4位までの表示) で求めなさい。ただし、変数x,yの値はscanf文で 入力させてください。
644 :
再描画 :2005/05/01(日) 10:34:34 ID:RRZjWKpR
どこに行けばいいですか? 先ほども別の板で言われてしまいました。
本屋さん
647 :
再描画 :2005/05/01(日) 11:57:32 ID:RRZjWKpR
ありがとうございます
648 :
glade勉強中 :2005/05/02(月) 06:24:53 ID:3JWzQ4cI
gladeを使用時して、コールバック関数にユーザデータとして widgetを渡す方法を教えてください。よろしくお願いします。 現状生成されるコード: interface.c g_signal_connect ((gpointer) button1, "clicked", G_CALLBACK (on_button1_clicked), NULL); 生成したいコード: interface.c g_signal_connect ((gpointer) button1, "clicked", G_CALLBACK (on_button1_clicked), GTK_OBJECT (entry1)); やりたいことは、ボタンが押されたときにentry1の内容を操作することです。 mainから操作するという方法もあるのですが・・・
button1 のプロパティウィンドウ出して、シグナルのところに書くだけでは? glade はウィジットの表示見本程度にしか使ってないから、違うかも…
同じく勉強中ですが、 ソースのg_signal_connect()の最後のNULLを手動で書き換えるしかなさそうです。 プロパティ窓の"シグナル"の中には、g_signal_connect()のdata引数に当たる部分を 指定する欄は(バージョン2.10.0の時点で)ありませんし、 entry1を"オブジェクト"のところに書くと g_signal_connect_swapped ((gpointer) button1, "clicked", G_CALLBACK (on_button1_clicked), GTK_OBJECT (entry1)); が生成されてしまいます。
651 :
再描画 :2005/05/07(土) 00:09:31 ID:fZ/PdFpz
>>642 何でその名で書き込みますか。
何の罠ですか。
私は
>>633 の「再描画」です。
同一人物に思われるじゃなかですか。勘弁してくださいよ、もう。
カブるのいやならトリップつけとけ。
コテハンでもないのに、いちいちトリップ付けられるのうざい。
えー、gladeの話に戻すとするか。
私も g_signal_connect()の最後は手動で書き換え。
>>648 の例だと NULLを単純に entry1にするかな。
interface.cは最初にgladeが生成したのから随分変更するので
ある程度コード書きが進行してからまたgladeに頼りたい時は、
別の所にコードを出力しておいて両interface.cをdiffして
ちまちま書き換えてる。
とりあえずのものであれば、 シグナルハンドラ(on_button1_clicked())内で lookup_widget()を使ってentry1を取得するのもありかと。
もしlibgladeを使うのなら、gladeが生成するXMLファイルから glade_xml_get_widget()でentry1を取得すればOK。 (もしくは一度glade_xml_get_widget()で取得したentry1を glade_xml_signal_connect_data()のuser_dataとして渡す) gladeファイルを何度も変更すると、Cソースをその都度出力してdiffを・・・と 手間がかかってしまうので、楽ができます。
657 :
glade勉強中 :2005/05/08(日) 23:25:53 ID:YB00BN6K
648のwidgetを渡す件ですが、 gladeが、生成する support.h 内の関数 lookup_widgetを用いて、 コールバック関数を内でwidgetを検索して取得することができました。 GtkWidget *entry = lookup_widget(GTK_WIDGET(button), "entry1"); gtk_entry_set_text (GTK_ENTRY(entry), dirname);
GTKについて勉強中なのですが、 HTMLのTABLEタグのような表を作成するにはどうするのが一番いいのですか。 GtkTableのうえに複数のGtkEntryを配置するのが普通?
660 :
GTK初心者 :2005/05/29(日) 16:11:34 ID:8OqUCAcQ
gint mainと int mainの 違いを教えて下さい。
sizeof(int)はマシンによって違うけどsizeof(gint)はどのマシンでも同じになる が、mainをgintにすべきかと聞かれると…微妙
662 :
login:Penguin :2005/05/29(日) 18:20:24 ID:8OqUCAcQ
ボタンをクリックして そのボタンを押した数をウィンドウ上に表示させる プログラムを教えて下さい。
>>661 gint main()にしたらダメでしょ。
gintがint以外に置き換えられる場合はwarningになるんだから。
>>662 どこまでできていて、どこで詰まってるのか?
665 :
662 :2005/05/29(日) 20:33:21 ID:8OqUCAcQ
>>664 callback関数の
gpointer data
をどうしたらよいかわかりません。
>>665 ラベルに表示するならボタンのコールバックを
g_signal_connect(button, "clicked", G_CALLBACK(clicked_cb), label)
とかしといて
コールバック側で
label = GTK_LABEL(user_data)
とか受けとけばどう?
667 :
662 :2005/05/29(日) 23:13:36 ID:8OqUCAcQ
>>666 m(__)m
ありがとうございます。
やってみます。
>>659 まさに、こんなのを探していました。
ありがとう。
ダウンロードして試してみます。
669 :
login:Penguin :2005/06/22(水) 21:07:00 ID:xe7y7k0v
昨日からgtk勉強してるのですがわからないことがあるので教えてください 1つのグループのラジオボタンを3つ作って、それをA,B,Cとします。 次に一つ普通のボタンを作って、 Aを選択中にこのボタンを押したらA関数が、B選択中はB関数が実行される・・ というプログラムを作りたいのですが、どのように考えればよいのでしょうか??
>>669 普通のボタンが押された時に呼ばれるコールバック中で、どのラジオボタンが
選択されてるか判定して・・・・、gtk の話でない気がするがどの辺がわからんのよ?
671 :
login:Penguin :2005/06/22(水) 21:34:03 ID:xe7y7k0v
>>670 コールバック中に判定する方法がわかりません
自分でいうのもなんですが、基本がわかってないと思います。
user_data でもグローバル変数でも好きなので、 状態をいれた変数かボタンを渡す。
673 :
669 :2005/06/22(水) 22:04:18 ID:xe7y7k0v
もう少し考えてがんばってみます 参考書なしで、ネットで調べてやってるんですが やはり参考書は買ったほうがいいですかね?
いい本ないから・・ ネットで gtk2 のチュートリアル見るのがいいと思う。
675 :
669 :2005/06/22(水) 22:19:39 ID:xe7y7k0v
>>674 そうですか・・・
さっきの問題は解決しました
Aを押したらint NUM=1、BならばNUM=2として
普通のボタンを押した関数のなかでNUMが1ならばA関数・・・
というようなのでいちおうできました
もっと高度なテクとかあるのかもしれませんが。。。
ありがとうございました
676 :
login:Penguin :2005/06/23(木) 01:50:52 ID:jw4l769e
GTK+をいじり始めて間もない初心者なんですが少しお聞きしたいことがあります。 ビデオキャプチャプログラムのようなものを作っていて、キャプチャした画像を pixbufに突っ込んでリモートのXクライアントで表示する場合、リアルタイム(30fps)での 表示がキツイです。画像データを圧縮して転送するオプションみたいなものはありませんでしたでしょうか?
677 :
login:Penguin :2005/06/23(木) 02:58:12 ID:jw4l769e
説明が足りてない気がするので補足。 GTKはver1.2です。リモートではない場合、描画は2ms程度で終りますが、 リモート(LAN内)では30ms前後かかり、他の処理を含めるとリアルタイム表示(33ms)は 微妙に無理といった感じです。 画像は320x240、24bitRGB、毎秒30枚と考えると、無圧縮では最低でも7MB/sもの 帯域が必要な計算になります。圧縮できるようなことをどこかで見た気がするのですが 気のせいでしょうか??改めて探してみたのですが見つかりません。
gtk 関係ないんじゃないの? 7MB/s ってことは RGB 生データ?それならなおさら gtk 関係ない気がするが。
679 :
676,677 :2005/06/25(土) 21:14:27 ID:O58VWF1R
>>678 7MB/sは生データですよ。30msってのはキャプチャにかかる時間を除いた、
表示(ネットワーク転送含む)するのにかかる時間ですので少なくとも
X関連であることは間違いないです。
自マシンで表示する場合はわずか2ms程度で表示できることからも明らかです。
680 :
login:Penguin :2005/06/26(日) 00:23:14 ID:bkhj+VqI
textviewで選択範囲の指定はどうすればよいのでしょうか? 選択範囲の取得の方は gtk_text_buffer_get_selection_bounds (textbuffer, &start, &end); で、出来るようですが。ちなみにやりたい事はある地点1から地点2までの範囲の文字列をクリップボードに記憶する事です。
gtk2.0 C言語にてプログラムを作っているのですが行き詰まってしまいました。 メニュー専用の関数を作り、トップレベルウィンドウのウィジットを渡してメニューを生成しているのですが、 その関数の中でメニューのあるアイテムが押されたときのコールバックとして、リストのアイテムやラベルの文字列等を 変更したいと思っています。 ラベルやリストなどのウィジットの取得方法がわからないのですがいい関数ありませんでしょうか? ご教授よろしくお願いします。
訂正です トップレベルウィンドウのウィジットを渡して ↓ メインで宣言したメニューバーウィジットのポインタを渡して ウィンドウのウィジットはlookup_widgetやget_widget関数が使えないか 試したときの名残でした。
683 :
login:Penguin :2005/07/15(金) 04:16:09 ID:pWVHLMqz
2.6からGtkMessageDialogは2行で書くことを強要するようになったのか・・・orz
685 :
login:Penguin :2005/08/14(日) 11:45:43 ID:hCW5GrPA
GTK+-2.8.0 release age
>>685 描画にcairoを使ったやつだな。安定してるのかな?
687 :
login:Penguin :2005/08/14(日) 22:23:45 ID:i3voTSGN
>>686 さあ。CairoもGLIBもPangoもうまくいったんだけど、
GTKのmakeが途中で失敗して試せず…
688 :
687 :2005/08/15(月) 15:49:57 ID:w6RYEsxj
できた。
>>686 安定してるとはおもうよ。今のところ怪しい挙動はしてないし。
あと、ColorChooserがきれい(;´Д`)。
689 :
login:Penguin :2005/08/21(日) 12:44:35 ID:K7D1YFrD
現在、Redhat9.0でX-Windowのプログラミングを 行っています。 質問内容 マインスレッドから子スレッドを生成しました。 子スレッドの中のfor()文でミリ秒単位(もしくは、それ以下) のデュレイ(sleep()の処理)を入れたいのですが、 実現方法がわからない状況です。 C言語の関数かX-Windowの関数で実現 方法をご存知の方がいましたら、アドバイス お願いします。
usleep()
>>690 有難う御座います。
usleep()確認致しました!
昨日から悩んでましたが、これで解決しました。
感謝感謝 <(_ _)>(本当に有難う御座います。)
Gtk 1.2で質問です。 CListのある行が表示領域の中か外かはわかるんですが、 その行が表示領域より上なのか下なのかを判別する方法はありますか?
1.2で不可能なら乗り換えますので…
>>692 先頭からなめていけばできるんじゃないか?
と CList を全然使ったことないオレが言ってみる。
みんなエディタどうしてる? Emacs? KDevelopとかEclipseとか統合環境ってやっぱ便利かな?
>>694 CListは2.x以降では使うべきでないウィジェットなので、調べるだけ無駄。
GTK2.0のプログラミングを始めるにあたって、 「ここ見て勉強しる!」っていうWebはありますか?
本家のチュートリアルを流し読んだら、 ・チュートリアル ・API リファレンス(gtk,glib) ・ソース ・ソースに付いてるサンプルコード(gtk-demo が特にいい) の4つを何時でも読めるようにローカルのハードディスクに入れて、後は実戦。
>>699 本家のチュートリアルが、既に腐ってるという問題がw
ソースを読めば理解しあえる それが本物のプログラマーだ
>>701 幻想だ。ほかのやつが書いたソース読んでもむかつくだけ。
半年前に自分が書いたコードが全然理解できません。
そこで文芸的プログラミングですよ
706 :
login:Penguin :2005/09/20(火) 18:01:07 ID:Vs5i3O4n
gtk+-1.2.10 って最近の gtk+-2.x より重くて不安定なの?
1.2.10のほうが軽いけど、機能的にかなり劣るしクラッシュを起こすような 大きな不具合もいろいろ存在する。
708 :
login:Penguin :2005/09/26(月) 18:08:58 ID:DNEXEhTN
★〜彼方の願い星〜★ このレスを見た人は、超ラッキーな人♪ でも、このレスを見ただけじゃ何も起らないよ。 効果を実感したいなら、このレスを5回違うスレにレスしてね♪ だぁい好きなあの人に告られたり、 成績がどんどん良くなって、先生に褒められちゃったり...。 次々とHAPPYな事が訪れます♪ 此の頃変なのがいっぱい回ってますが、これは本当です!! これが本物の、初代HAPPYメールです♪
709 :
login:Penguin :2005/10/03(月) 03:44:59 ID:CJIUV5JW
質問です。 GtkComboBox (=ドロップダウンリスト)の gchar* gtk_combo_box_get_active_text (GtkComboBox *combo_box); が返す文字列って、GtkComboBox が内部で持っている文字列のポインタそのものなんでしょうか。 だとしたら、文字列の中身をいじっちゃいけないですよね。 もし、新たに別なコピーを作って渡してくれているとしたら、使い終わったときに g_free() してあげるべきだと思うんですけど、どっちなんでしょう。 環境:FreeBSD5.4 gtk+2.6.10
>>709 Returns : a newly allocated string containing the currently active text.
だから、コピーが返ってくる。
GTK+ではコピーでない文字列が返ってくる関数は返り値の型として
G_CONST_RETURN gchar *を使っていると思ってよい。
現在、SUSELINUX10.0を使っています。これからGTK+でプログラミングを始めようと 考えているのですが、初心者レベルの参考書かWEBページを教えていただけませんか?。 C言語は理解できるのですが、GTKのコンパイルの仕方とか全くわからない者です。 やりたいことは、ベクトルデータを読み込んで、ウィンドウ上に線や円を描きたいのです。 宜しくお願いします。
>>712 昔、アテナウィジェットでプログラムを組んだことがあるので、理解ははやいです。
ありがとうございました。
GtkButtonを使ったボタンを通常より立体的にしたいのですが、 リソースを設定するだけで可能なのでしょうか。
GTKはリソース使いません。
>>715 .gtkrcはリソースファイルって言わないの?
>>715 Reference Manual に Resource File の章があるんですけど。
718 :
login:Penguin :2005/10/25(火) 17:22:31 ID:m1tx75Sl
gtk+-2.0をインストールしたいのですがうまくいきません。 pkageconfig,glib,atkをmakeしたあと pangoをコンパイルしたのですが fontconfigがないとのエラーが出ました。 fontconfigをダウンロードしたのですが、以下のようなエラーが出て コンパイル出来ません。 どうすればいいのか、アドバイスをお願いします。 ../fontconfig/fcfreetype.h:27 から include されたファイル中, ../src/fcint.h:39 から, fc-lang.c:25 から: /usr/local/include/freetype2/freetype/freetype.h:20:2: #error "`ft2build.h' hasn't been included yet!" /usr/local/include/freetype2/freetype/freetype.h:21:2: #error "Please always use macros to include FreeType header files." /usr/local/include/freetype2/freetype/freetype.h:22:2: #error "Example:" /usr/local/include/freetype2/freetype/freetype.h:23:2: #error " #include <ft2build.h>" /usr/local/include/freetype2/freetype/freetype.h:24:2: #error " #include FT_FREETYPE_H" make[2]: *** [fc-lang.o] エラー 1 make[2]: Leaving directory `/usr/local/src/fontconfig-2.2.0/fc-lang' make[1]: *** [all-recursive] エラー 1 make[1]: Leaving directory `/usr/local/src/fontconfig-2.2.0' make: *** [all-recursive-am] エラー 2
freetype2インストールしてある?
コンパイルエラーの意味がわからないなら、 rpmとかdebとかのをインスコしろよ
java-gnomeとかgnoclとかいじってる奴っておらん? もうちょっと盛り上がれこのスレ。
724 :
login:Penguin :2005/10/26(水) 20:04:52 ID:7wGr95kq
>>722 java-gnome vs gtk#とかおもしろそう。
725 :
login:Penguin :2005/11/26(土) 16:49:49 ID:QuE9fj5+
GTK+2.0以降 で GDK Imlib を使う方法はないもんでしょうか。
UIManagerでMenuToolButtonを扱うにはどうすればいいのでしょうか?
GtkTextViewで質問があります。 ウィンドウにメニューバーとテキストビューをのせています。 横スクロールバーはなくし、長文を折り返して表示させたいのですが、 ウィンドウが勝手に広がってしまいます。 また、ウィンドウを狭くしようとしても、狭くできません。(マウス操作で)
>>727 gtk_text_view_set_wrap_mode()
>>728 レスありがとう。
ワードラップ効かすと折り返しが妙なとこでされちゃうので、NONEにしてます。
具体的には、空白9つのあとに数字を記述した行と連続した文字の行で、表示位置がズレてしまうので。
1 2 3 4 5 6 7 8 9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
>>729 1 2 3 4 5 6 7 8 9
ありゃ、先頭に空白いれたつもりが...
それからGtkTextViewのかわりにVTE を使って、どうように表示できるようにしてみたのですが、
表示自体はうまくいけそうだったのですが、ウィンドウのリサイズで内容を書き換えてくれないし、
なにやら Gdk-CRITICAL が出力されてます。
[vte:xxxxx]: Gdk-CRITICAL **: gdk_gc_get_colormap: assertion `GDK_IS_GC (gc)' failed
因に SuSE 10.0 使ってます。
>>727 以前、狭くできなくて悩んだ時は textview に gtk_widget_set_size_request で
適当なサイズを入れて狭くできるようになった。
理屈はわからないけど
>>731 ご教授いただきましたように、
gtk_widget_set_size_request (GTK_TEXT_VIEW(text), 100, 75);
と一行、適当(値も適用)に入れてみました。
確かにウィンドウのリサイズができるようになりました。
ただ、折り返して表示してくれないのでorz。
今は、VTEで作業してます。
>>732 お前が折り返しをしないように設定してるからだろ。ちっとは頭を使え
>>733 ワード・ラップとは、ある単語が一行で完了しない場合に、(単語の区切りを意識して) 強制的にその単語を次の行に移動して表示する機能をいいます。
単語の区切りを無視してくれるようにはできないですよねぇ...
>>734 GTK_WRAP_CHAR
リファレンス嫁
>>735 GTK_WRAP_CHAR にもしたが、へんなとこで改行されてしまうんだけれど...
リファレンス嫁んorz
>>736 ここでゴチャゴチャ訊いてるより自前でやってしまう方が早いと思うが
コマンドライン引数で `-' を渡したいんですが、gtk_init() で `-' は取り除 かれるみたいですね。 なんか回避方法とかありますか? やっぱ gtk_init() の前で一旦引数をパーズするしかない?
慣習としては -- をおいてオプションと引数を区別するんじゃないか。 GTKが対応してるかどうかは知らんけど。
>>740 うーん、オプションとして `-' を渡したかったんですけどね。`-file -' で
標準入力からデータを読む、みたいな。とりあえず gtk_init() の前で捕捉す
ることで逃げました。
ちなみに `--' には対応してるみたい。試してみたら `--' の後の `-' は
gtk_init() を通過してきた。
シグナルの発行ってどうやるの?
g_signal_emit()
コールバック関数の中でブロッキングする処理があるんですが ウインドウ上のボタンを押されたらキャンセルさせたいです。 でもコールバック関数がブロッキングしてたらgtk_main()に返らない のでキャンセルボタンには反応できないんでしょうか? 解決方法をご存じの方がいらっしゃいましたら教えてください。
>>744 よくわからんが、長時間かかる処理をキャンセルできるようにしたいということか?
gtk と関係ないがスレッドとかどうよ?
746 :
744 :2006/02/22(水) 22:32:46 ID:s0bZ0aZZ
うーん、スレッドでもいいんだけど割り込み処理みたいなこと できないかなぁーと思いまして。。
適当な間隔で while (gtk_events_pending()) gtk_main_iteration(); を呼んで一時的にイベントループを回してやると、スレッドを使わなくてもUIの処理ができるようになる。 システムコールなんかで長時間ブロックするような場合には使えないけど。
749 :
login:Penguin :2006/04/06(木) 09:06:33 ID:xwiqVJCG
すいません、どうしてもわからなかったのですが… gtk_label_set_markup() で '<' と '>' を表示する方法がわかりません。 タグの開始(終わり)と判断されてしまうようです。 すいません、よろしくお願いいたします。
>>749 以下の様にしたらちゃんとイタリックで「<test>」と表示されるみたいだけど、
駄目すか。
m = g_markup_printf_escaped ("<span style=\"italic\">%s</span>", "<test>");
gtk_label_set_markup (GTK_LABEL(label), m);
g_free (m);
751 :
749 :2006/04/07(金) 00:53:52 ID:064lZiFe
752 :
login:Penguin :2006/04/08(土) 16:50:28 ID:qD5vNEHv
GTKアプリケーションでウィンドウを分割しているウィジット(マウス操作でレイアウトの棒を左右に動かせる)を見掛けたのですが あれは何と言うウィジットなのでしょうか。 ウィジットの名前が分からないと調べようもないので教えてください
753 :
login:Penguin :2006/04/08(土) 17:07:07 ID:et4vCTR5
多分 GtkHPaned っていうやつだと思う Glade(2.12.1)だと右から2番め下から2番めにあるやつ
754 :
login:Penguin :2006/04/09(日) 00:12:12 ID:lWv/4qoU
>>753 ありがとうございました。
そのウィジットで出てきました
755 :
login:Penguin :2006/04/26(水) 18:09:37 ID:k4vlbIwh
gtkで画面をすぐに更新させるにはどうしたらいいでしょうか。 swapBufferやflushのようなカンジの関数があるかと 思ったんですが、見付かりませんでした。
GdkFlush って無かったっけ?
関数名長いよ!ヽ(`Д´)ノ ウワァァァン
ああ、C言語だからな。
759 :
login:Penguin :2006/05/09(火) 07:32:53 ID:reS9af81
GtkComboBox で質問です…。 GtkComboBox の signal で "changed" が発行された時と同じような感じで コールバックを呼びたいのですが、 選択されたアイテムが前のと同じでも呼べるようにするにはどうすればよいでしょうか… 識者の方、お願いいたします。
760 :
login:Penguin :2006/05/21(日) 23:50:35 ID:wP3kA47Z
Gtk初心者です get_wigetを使ってウィジェットから値を取り出したのですが, undefined reference to `get_widget` というエラーメッセージが出ます 何か解決する方法はあるでしょうか? また,代替手段などありましたら教えて下さい
762 :
760 :2006/05/22(月) 00:36:55 ID:cF96P9p7
失礼しました.訂正します > get_wigetを使ってウィジェットから値を取り出したのですが, ウィジェットから値を取り出すために,get_widgetを使って ウィジェットを取得したいのですが, > undefined reference to `get_widget` > というエラーメッセージが出ます > > 何か解決する方法はあるでしょうか? > また,代替手段などありましたら教えて下さい よろしくお願いします
764 :
760 :2006/05/22(月) 21:47:05 ID:cF96P9p7
>>763 ありがとうございます
> glade使ってるんだよね? glade使ってないのにgladeで準備された関数を
使っているという話じゃないよね?
はい.glade使ってます.
でも,lookup_widget以外を使って同じような関数って,皆さんどのようにしているんでしょうか?
それから,GTKを学習する上で参考になるHPなどありましたら,
教えて下さい
765 :
763 :2006/05/23(火) 00:10:16 ID:gEQHRwr8
>>760 GTKを簡単かつ体系的に教えてくれるHPは無いかもなぁ。
GTK自体が簡単なもんじゃないし、変化もしていくからね。
私が参考にしているのはGNOMEのプログラミング関係のドキュメント類。
それとGTK+とかglibのソース。
それと、gtk-demoというコマンドはとても参考になります。
gladeのsupport関数を使わない方法は、
モジュール的構造も考えなきゃならない少し大規模なプログラミングを
するとなると、自然にそうなる気がする。これは言語(C言語とか)を
じっくり体系的に勉強する必要があると思う。そうすると自然に見えてくるかな。
変数のスコープ(通用範囲)に大きく関わります。
簡単に言うと、widgetのアドレスさえどこかに覚えておけばいいので、
必要なものを構造体にしてそれを関数の引数として渡せばいい。
あるいはGUI部分だけ1ファイルにしてその中の最初でstatic変数として定義とか。
この場合はwidgetからの値の取得とかwidgetの書き換えとかはこの1ファイル中で
行って、他の部分にはwidgetのアドレスは必要ない状態にするといいかな。
ちなみに、lookup_widgetを使わない場合はinterface.cの
GLADE_HOOKUP_OBJECT とかのマクロ部分は必要なくなります。
766 :
login:Penguin :2006/05/24(水) 10:41:45 ID:zKYF/EzE
gtk+-2.6 をつかってるんですが、 GtkRadioButtonで、group内のすべての radio buttonを inactiveにする方法ってあります? gtk_toggle_button_set_active(radio_button, FALSE) だと activeになっているものを inactive にしてくれないみたいなんですが。
>>766 必ず一つだけが active になってるのが radio button なので、できない。
>>767 そうみたいですね... newしたときから activeになってるみたいだし。
どれも選択されていない RadioButtonって需要ないのかしらん。
素直に GtkToggleButtonに signal組み合わせて作ります。
gtk_button_new_from_stockはgtk_buttonと名が付くのに何で GtkWidgetを返しやがりますか
gtk_hogehoge_new は GtkWidget *を返すって conventionじゃないの? そのほうが gtk_widget_showとかに渡すときも面倒じゃないし。 gtk_hogehoge_do_something の第1引数は たいてい GtkHogehoge だから その場合は面倒だけど。 OOPLでやればそんな面倒はないんだけどね。
771 :
login:Penguin :2006/06/08(木) 02:09:17 ID:+cYFIqs+
質問です。 GTK のメインループで使っている GMainContext は g_main_context_default () で 取れますか? 実は main_context = g_main_context_default (); して、この main_context を他のライブラリに使用しようとしたら(ライブラリの初期化に必要) 「FreeBSD ではうまく動く、しかし Windows ではうまく動かない」 という現象に出くわしました。 なにせ main context も loop も理解していないので…。 どなたかお教えくださいませ.............
772 :
login:Penguin :2006/06/08(木) 03:26:47 ID:DJniGV22
gtk_widget_destroyと g_object_unrefってどう使い分けるんでしょう? ほかからも参照されている可能性を考えると g_object_unref() を 使うべきの気がするんだけど、だとすると gtk_widget_destroy() が ある意味がわからない...
gtk_window_set_title(window,"ゲイツ砲作動");
glibとかgtkのドキュメントでman形式のものってありますか? --enable-manとかやってみたけど、よくわかりません。 どこかへのポインタでもいいですので、教えていただけませんか。
つ/usr/share/gtk-doc
GTK+ 2.10.0とGLib 2.12.0のリリースアナウンスメントをwww.gtk.orgで発見 でもリリースノートとtarballは、まだなのね…
Gtk使えねぇええええ TreeModel超糞。
780 :
longhon :2006/07/17(月) 23:28:47 ID:BTBgIeR8
いまGtkをまなんでexcelみたいな表を作ろうと考えたのですが、 tree view list を使ってできるというところまではわかったのですが、 日本語のチュートリアルはなく、原本のリファレンスを見るものの さっぱりな状態です。ちょっと教えていただけないでしょうか? クレクレ君ですみません。
Linuxならgtk-demoでサンプルが見れるぜい
782 :
longhon :2006/07/18(火) 00:56:09 ID:P7E0MH5b
おーdemoのバージョンってどうやってしらべるんだろ?
表作るなら
>>659 みたいなのもあるらしい。
俺はListStore程度で済む事しかやらん(やれん)から使った事ないけど。
あとリファレンスはruby-gtkのが割と日本語化されてて初めは楽。
784 :
login:Penguin :2006/07/18(火) 06:48:40 ID:TIhQa3Ub
jpegイメージを表示するプログラムはどれくらいかんたんにできますか?
785 :
longhon :2006/07/18(火) 16:17:54 ID:P7E0MH5b
そのListstoreがわからないーーー
>>784 #!/usr/local/bin/perl
use Gtk2 '-init';
$win = new Gtk2::Window->new(GTK_WINDOW_TOPLEVEL);
$img = new Gtk2::Image->new;
$win->signal_connect("delete_event", \&qu, undef);
$win->add($img);
$img->set_from_file("hoge.jpg");
$win->show_all;
Gtk2->main;
exit;
sub qu { Gtk2->main_quit; }
788 :
longhon :2006/07/21(金) 00:43:24 ID:6uqESCNY
ソートとeditが同時に出来ないーー static void add_columns(GtkTreeView *treeview) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeModel *model = gtk_tree_view_get_model(treeview); /* column for date */ renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_get_column(treeview, COLUMN_DAY); //column = gtk_tree_view_column_new_with_attributes("Daisuke", renderer, "text",COLUMN_DAY, NULL); g_signal_connect(renderer, "edited", G_CALLBACK(cell_edited), model); g_object_set_data(G_OBJECT(renderer), "column", (gint *)COLUMN_DAY); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, "Date", renderer, "text", COLUMN_DAY, "editable", COLUMN_EDITABLE, NULL); gtk_tree_view_column_set_sort_column_id(column, COLUMN_DAY); gtk_tree_view_append_column(treeview, column); 以下略
789 :
longhon :2006/07/21(金) 02:15:17 ID:6uqESCNY
訂正 "Daisuke" -> Date デバックの張ってしまった
790 :
login:Penguin :2006/07/22(土) 22:44:27 ID:ePUeuv0L
リストの更新ってどうしりゃいいんだ?
792 :
login:Penguin :2006/07/23(日) 05:14:23 ID:x3i4d7lC
GTKのスレで質問するのは適切ではないかもしれないのですが、 リアルタイムに描画を更新するプログラムでVSYNCを取得するって どうすればいいのですか? 簡単なアニメーションを表示させたくて、ウィンドウシステムや ウィジェットなどはなんでもいいのですが、普通はどのようにVSYNCを 取得するものなのでしょうか? ウィンドウシステムごとに固有の方法が用意されている? それともカードのレジスタかなんかから直接とってくるのでしょうか? (それともVSYNCなんて取る必要はない?) 描画関係に関してはまるっきり素人なもので…
無理無理
>>792 DRM_IOCTL_WAIT_VBLANK で検索してみ
795 :
login:Penguin :2006/07/23(日) 11:29:11 ID:x3i4d7lC
>>794 ありがとうございました!
調べてるときに、割り込みでVBLANKがとれない場合
単にVBLANKの周期で処理を行うようなpatchがあったりしたのですが
こういったことも有効なものなのでしょうか?
(何か根本的に勘違いしてる、私?)
意味ないんじゃないのそれ。 単に周期を合わせるのだと、運がよければvsyncに合うけど、 運が悪ければ書き換えの最前線が常に画面上になるんじゃないのかな。
無理無理
gtkでほにゃららウィザードみたいな感じで画面全体を 遷移させたいのですが、どうすればいいか教えてください。 やっぱり神様windowがパネルごとshow/hide?
おまいらやっぱCで書いてる?
Haskellで。
#include <gtk/gtk.h> がダメで `pkg-config --cflags --libs gtk+-2.0` だと大丈夫なのはどういう意味があるのでしょうか。 windows.h のように普通にincludeできないと違和感を感じてしまうのですが…
何がどうダメなのさ
pkg-config --cflags --libs gtk+-2.0 を実行したらすぐわかるような
gtk を試しはじめてネット上で検索とかしまくってるんだけど、 検索すればするほど日本ではあまり使われてないような…。 みんな何作ってるの?公開とかしてる?
>>806 本が結構売られているよ。
GTK+で有名なのはGIMPかな。っていうかこれのために作られたのがGTK+・・・
APIのレファレンスマニュアルのページ読むと必ずハングするんですが、 なんか意地悪してるんでしょうか。
>>810 GTKベースのソフトで読まないとハングするよ。
読むのに使ってるソフトのスレで訊くべきじゃないの
GtkMenuToolButtonをGtkUIManagerで簡単に作る方法は? UIのXMLとGtkActionEntryで一元的に管理したいんだが。
814 :
login:Penguin :2006/09/21(木) 07:39:24 ID:5S0sHSq3
すいません、質問です。 Windows で半角英字には Arial 10 を、日本語には MS PGothic 10 をと言うように、 別々にフォントを rc ファイルで指定したいのですが、無理ですか…? font_name="Arial 10,MS PGothic 10" は試したのですが、ダメでした…。
>>814 GNOME使ってるなら
gconf-editorで
/desktop/gnome/interface/font_name
Arial, MS PGothic 10
816 :
814 :2006/09/22(金) 07:13:17 ID:shCBdU/U
>>815 ありがとうございます。GNOME は使っていません。
単体なソフトなもので…。
もう少しいじってみます。
>>816 試してないけど、
GtkSettingsで
"gtk-font-name"というプロパティを
Arial, MS PGothic 10
に設定したらできるかも
818 :
814 :2006/09/23(土) 09:00:47 ID:oVJ5FxNJ
>>817 ありがとうございます。
試してみたのですが、だめでした…。
実は後で気がついたのですが、
font_name="Arial, MS PGothic 10"
は FreeBSD でうまく行って、Windows ではうまく行かないことが分かりました。
日本語は GTK デフォルトのフォントになってしまうようです。
(firefox とか thunderbird とかと同じ)
よく分からないのですが、放置しておきます。とほほ…。
819 :
814 :2006/09/26(火) 09:24:06 ID:G1FxsBCP
一応自己解決しました。 font_name="Arial,MS PGothic 10" ですが、コンマの後にスペースがあると、 Windows ではダメなようです。(FreeBSD では OK ですが) なんかちょっと悲しい。
ちょいと質問なんですが、gtk_label_get()の第二引数って、取得したテキストを指すポインタのポインタの領域をmalloc等で領域確保する必要はないんですか? char *s; GTK_LABEL(label),&s); として、sをg_mallocしてg_freeしたら、なんか実行時にエラーが出ました。 知ってる人いたら教えてください。
>821 >It does not make a copy of this string so you must not write to it. なので下手にいじってはいけない。多分constと思っていい。 あとそれdeprecated。
823 :
821 :2006/10/26(木) 23:48:57 ID:gIte4gPi
>822 ありがとうございました。(コードが一部抜けてました。) gtk_label_get(GTK_LABEL(label),&s); とした場合、sがconst扱いになるということですね? あと、deprecatedというのは、gtk_label_get()の使用は推奨されてないということでしょうか? ならば、ラベルの名前を取得する方法は、どうすればよいでしょうか?
>>823 gtk_label_get_text() or gtk_label_get_label()
825 :
821 :2006/10/27(金) 00:36:56 ID:l81dNlg+
>824 ありがとうございました。
GtkWindow のサイズをマウスを使って変更したときに、 マウスボタンを離すまでシグナルが発生しないようにしたいんですけど GTK+のチュートリアル読んでもさっぱり・・・ どなたか手がかりを下さいませんか。 今のままだとサイズ変更の途中で再描画されてしまってマズー
どちらかっていうと Window Managerの設定じゃないの? と、思い付きを書いてみる。
g_signal_handler_blockとg_signal_handler_unblock だったと思う
>>827 私もそう思った。
opaqueとかoutlineとかいう名称でいろんなWMで設定できる項目だと思う。
ソフトの方でその動作を組み込むこともできなくはないんだろうけど。
830 :
826 :2006/11/05(日) 22:06:22 ID:rcTSwJgs
提案ありがとうございます。WMですか。 Windowsでやってるのでその辺の設定がちょっと。 g_signal_handler_block あたりで何とかチャレンジしてみます。
画面のプロパティ→デザイン→効果→ 「ドラッグ中にウィンドウの内容を表示する」をoff Windows XPの場合。
832 :
826 :2006/11/12(日) 11:01:10 ID:bAXTQ/Hd
結局、Eventboxとgtk_widget_size_request使って実装しますた。 ボタンイベントの座標を取得して、 Eventboxの右下の部分だけに反応するようにいじりました。 これだとリサイズ中の枠とかは出ないのが難点ですけど。 831さんの方法が一番スマートだとは思いますw 皆さんありがとん。
質問ですが、gtk_main_quit()した後って、作ったウィジェットとかが確保していたメモリは全てフリーされるのでしょうか? さらに、GDKのウィジェット(GdkPixmapとか)も開放されるのでしょうか?
834 :
login:Penguin :2006/11/24(金) 14:25:27 ID:7Nf7BP84
おい、お前ら JCL切ってパンチカードでFORTRANプログラムやってた漏れが来ましたよ。 GLib, GObject, Pango, ATK, GdkPixbuf, GDK について取り合えず概要を教えやがれ。
消えろカス
836 :
login:Penguin :2006/11/24(金) 15:05:31 ID:7Nf7BP84
Linux遣ってる香具師って人間性に問題ある奴が多いんだよな。 そんなことはない!835見たいな奴は俺も嫌いだ!って香具師がいるなら834にレス寄越せや。
837 :
login:Penguin :2006/11/24(金) 16:34:59 ID:N0elR/SA
そっか 835みたいなのがデフォルトなのか。
プログラミングやる気があるならググレよ
>>838 ググったらここにたどり着いたんだろ。
他にGTK+関係の掲示板ってあるのか?
少なくともGTKでぐぐった結果の質問とは思えないな。
841 :
login:Penguin :2006/12/09(土) 02:26:24 ID:t58tuYkG
質問させてください。 DebianでGTK+を使ったプログラムをコンパイルする際に、必要となる パッケージを教えていただけないでしょうか?
842 :
841 :2006/12/09(土) 02:49:19 ID:t58tuYkG
libgtk2.0-devをインストールしたらコンパイルできました。 お騒がせしました。
843 :
login:Penguin :2006/12/22(金) 16:34:29 ID:WGodCSmn BE:91837692-2BP(1002)
ごめんなさい。質問です。 glade2.12 + libglademm-2.4 + gtkmm-2.4でGUIアプリ作成しています。 glade上で作成したカスタムダイアログ(名前 = dialog_add)を、 メインウィンドウ上のボタン押下でモーダル表示させたいです。 ダイアログのプロパティは 初期「表示可否」は 「いいえ」 「モーダル」を「はい」 にしています。 Gtk::Dialog* dialog_add = 0; m_refGlade->get_widget("dialog_add", dialog_add); dialog_add->run(); として表示させたいのですが、 表示されるダイアログがタイトルバーが付いていないし、「キャンセル」や「OK」 ボタンを押しても反応してくれません。 何かやり方が間違っているのでしょうか? glade使わないカスタムダイアログの作成方法の参考ページはあったのですが、 glade使用した例は見付かりませんでした・・・。 どなたかご教授ください。
gtk_dialog_runの使い方とか使用例をもっとよく調べるといいよ
とりあえず gtklab.sourceforge.jp で、初歩の初歩は分かった。 次はフォントの選択方法を知りたいという人間は 何見ればいいすか。
ttp://www.gtk.org/ の GTK+-2.0 Tutorial か API Reference じゃない?
フォントの選択方法ってなんだろう?
ダイアログなら GtkFontSelectionDialog があるけど。
フォントの扱いを飲み込むためにもPango眺めとくのは必須だろ。
プログラミングじゃ無いんだけど gtkrcの情報交換してるとこは何処? engineによって書式も様々なんで
849 :
login:Penguin :2006/12/30(土) 00:11:53 ID:AKdqp1vp
SUSE 9.2でリソースファイルで色設定しても反映されません。 同じソースとリソースファイルでSUSE10.2で実行すると反映されます。 また、SUSE10.2でもボタンのラベルに色がつくのですが、 ボタンそのものに色が付きません。 この辺詳しいHPとかありませんかね?
850 :
login:Penguin :2007/01/11(木) 13:58:24 ID:fD42ZP3M
X/Toolkit(?)のXtAppAddInput()というモジュールと同等の機能を持つ GTKのモジュールってありますか? 開発言語はC言語です。 う〜ん、探しても見つけられなかった。探し方が悪いのかな・・・?
>>850 XtAppAddInput()がどういうものか説明すればいいのに。
そういうききかただとX/Toolkit(?)とGTKの両方を知っている人しか答えられないでしょ。
852 :
850 :2007/01/11(木) 14:34:57 ID:fD42ZP3M
>>851 その通りですね。
XtAppAddInput()は指定したファイルディスクリプタの状態が
変化(Read、Write、Exe可能になった等)した場合に登録したコールバック関数を
呼び出すというものです。
select()にコールバック関数呼び出し機能を追加した感じのモジュールです。
854 :
850 :2007/01/12(金) 18:37:22 ID:xAKQOOb4
>>853 ありがとうございます
gdk_input_add()で、できそうですね。
glib の Main Event Loop あたりを使うんじゃないかと思うんだが…。
856 :
login:Penguin :2007/02/01(木) 18:51:51 ID:oa7P0Xiu
GTK+でテキスト文字(漢字)をgtk_label()で描画するときに、 フォントのサイズで位置調整したいんですが、幅を取得する関数ってないんでしょうか? gdkでフォントセットをロードして描画する時は、gdk_text_width()が使えるんですが。。 gtkだけで簡単に済ませたいので。 よろしくお願いします。
857 :
login:Penguin :2007/02/03(土) 08:37:48 ID:yTpUnzEZ
gtk+2.0でボタンwidgetとlabel widgetを 生成・消去(destroy)を繰り返し て走らせておくと徐々にメモリを食いつぶしているようにみえるんですが… そう言うのを確認した人いますか? もし居たら対策は?
>>857 memprof とか valgrind 使って本当にメモリリークしてるか確かめてみて
>>857 やってみたけどシステムモニター眺めてわかる程のリークはしてないように見えるが。
#include <gtk/gtk.h>
int
main(int argc, char *argv[])
{
gint i;
GtkWidget *box;
gtk_init(&argc, &argv);
box = gtk_vbox_new(FALSE, 0);
for(i = 0; i<1000000; i++){
GtkWidget *label = gtk_label_new("label");
GtkWidget *button = gtk_button_new();
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
gtk_widget_destroy(GTK_WIDGET(label));
gtk_widget_destroy(GTK_WIDGET(button));
}
return 0;
}
デストローイ忘れしてるだけなんじゃねーの
チュートリアルのrulers.cを改造して、ウインドウサイズを変更したときにルーラの目盛りも 更新するようにしたいんだけど、drawing_areaはサイズを取得出来ない・・・よね? かといってgtk_window_get_size(window, w,h);だと全体の窓サイズになってしまうし どうすればいいですか。
>>863 drawing_area の configure-event 見ればいんじゃね?
朝からずっと調べ続けて今ようやくわかった・・・。 expose_event で GdkEventExpose から area を参照するのね。
866 :
login:Penguin :2007/02/14(水) 09:42:58 ID:BwmsCoUm
ファイラのようなファイルの mime タイプに応じたアイコンが並んでいるリストを作りたいんですが、 どうしたらいいんでしょうか。 手がかりだけでもかまわないので、ご教授お願いします。
GtkIconViewを使えって話じゃないのかな? ファイラってのがよくわからんが。 (Windowsの explorerはいつも「詳細」にして使ってるんで)。 mime-typeに応じたアイコンを取得したいってのなら、知らん。 まず、やりたいことを分割して曖昧じゃない日本語で箇条書きにして、 必要度、依存関係を書いて提示しろ。 できればこんなところに質問しないか。
Explorerを詳細表示にして使ったところで、ファイル名の左側に 拡張子に応じたアイコンが表示されてるじゃん。
869 :
login:Penguin :2007/02/17(土) 15:44:53 ID:fKE+Jy3+
たとえば、firefox で実装されているように、 * あるアプリケーションがすでに実行されていた場合は新しくタブでドキュメントを開く * そうでなければ、新しいウインドウでドキュメントを開く という動作を実行するのには、どういう仕掛けを使うのが一般的なのでしょうか?
870 :
login:Penguin :2007/02/17(土) 16:43:58 ID:KR0sG7u1 BE:253234144-2BP(0)
>>869 1. プログラムを起動したときに別のインスタンスがいないかどうか確認
2. インスタンスがいたときにはそいつにメッセージ(Firefoxの場合ドキュメントのURLかな)を渡して自分自身は終了
ってことでいいかな?結局多重起動のチェックとプロセス間通信がやれればいいのね。
SylpheedではUNIXドメインソケットで1,2をやってるみたい。
Gtk+周辺のテクノロジで固めたいならD-BUSを使ってもいいかも
>>870 は同じホストしか考えないプログラムの場合の一般論であって、
Xの場合はとるべき手段が違ってくる。
netscapeはXプロパティ経由で通信するので、同じスクリーンにウィンドウが
開いていればプロセス自体は別のマシンでも通信できる。
firefoxも同じ。
GDK/GTK+にXプロパティなんかのラッパーがあるかどうかは知らない。
それで見付からないなら諦めるもよしプロセスを起動するもよし、で
起動するのならば、通常のプログラム同様データファイルの一貫性保護
などを目的としてロックファイルなどによる多重起動チェックをやればいい。
ウィンドウを作らないとチェックできないのがちょっと嫌かも。 あと既に動いてるプロセスがサスペンドされたりしてたら それが復活するまで判定が終了しないんじゃね。
874 :
login:Penguin :2007/02/22(木) 15:48:43 ID:jpFFYqu/
GTK 1.2から2.0に切り替えたら、XTestライブラリが使えなくなっちゃたんですが。 linkでエラーになります。(Undefined reference `XTestQueryExtension`) 知ってる方いましたらお願いします。 ディストリ Vine4.0 gtk2-2.4.13 分からないので、XTestをやめてXSendEvent()とかを使って書き直してます。
単に-lXtstをGTKがリンクしなくなっただけでは。
>>875 うまくlink出来ました。ありがとうございました。
gtk1のソースをgtk2に変更するツールはありますか?
なんでも「ツール」と呼べば済むと思ってるんじゃねーぞ。 そういう奴が女性を産む機械だとか抜かすんだ。
879 :
login:Penguin :2007/02/24(土) 18:49:12 ID:M/6/J6Qq
gtk1のソースをgtk2に変更するスクリプトはありますか?
スクリプトキディおつ えーと、あれだ。ない。
881 :
login:Penguin :2007/02/24(土) 20:31:22 ID:Z7G0MF3p
>>878 を女性を産む、機械と読んでエロゲーとか思ったのはおれだけじゃないはずwwwwwww
882 :
login:Penguin :2007/02/25(日) 16:21:18 ID:jPY2U1RH
あるウィジットの大きさを一定以上に広がらないようにしたいのですが、どうするのが正解ですか?
いつもGladeで設定しちゃってる。
前から思ってたんだが、なんでみんなlibglade使わないの? 便利なのに……
ライブラリ依存がどんどん激しくなるよね。 C++なんか使ってたら、hohogemmなんてリンクするものがどんどん増えていく。 ああいうの一つにまとめて標準で入れておいてくれたらもっと楽なんだけどなあ。
886 :
login:Penguin :2007/03/03(土) 08:59:18 ID:iO4b+0oy
Windows での話しなのですが、GtkTextView を作った時に同時に日本語入力を オンにすることってできますか? input method 関係を探したんですが、どうも見つからなくて…
それってGTK側でやる仕事なのかなぁ。 ちょろっと調べただけだけど、ImmGetConversionStatus()でIMEの状態を調べて keybd_event()でVK_KANJIじゃない?win32apiの範疇だと思うけどな。
>>887 どうもありがとうございます。
考えてみれば Windows の API でやるのが正しいですね。
書き込みして気づきました。
ありがとうございました。
889 :
886 :2007/03/06(火) 02:47:16 ID:rlQdCBer
890 :
login:Penguin :2007/03/11(日) 10:56:27 ID:bVyF8jVB
>889 そこにあるコードは著作物なのだが。
>>890 これを見るとrpmコマンド叩くにも
>>889 のリンク先に許可を求めないといけなくなるんだよね。
著作物だし。
892 :
login:Penguin :2007/03/12(月) 09:27:43 ID:slT8Ay77
gtk_window_new() でwindow生成後に、最小化してwindowを隠すにはどうすればいいんでしょうか? 教えてください m(_ _)m
gtk_window_iconify() てかマニュアルぐらい読め
895 :
886 :2007/03/14(水) 00:53:00 ID:LNXDqswG
>> 890 結局必要なのは ImmSetOpenStatus() ぐらいなものなので、 #include <gdk/gdkwin32.h> void ImmSetStatus(GtkWidget *widget, ImmStatus status) { HWND hWnd = (HWND) GDK_WINDOW_HWND(widget->window); HIMC hIMC = ImmGetContext(hWnd); /* Set IMMM status */ ImmSetOpenStatus(hIMC, (status == IMM_ON)); /* Release context */ ImmReleaseContext(hWnd, hIMC); } ってしたよーん。ってほとんど GTK と関係ないっすね。
せっかくGTK使ってるのにプラットフォーム依存にしてしまうの?
MinGWでgtkを勉強してるんですが、プログラムを実行するときに、 syntax error near unexpected token `main(' と出てきて、 プログラムが強制終了してしまうんですが、誰か対処法を知っていたら教えて下さい。 コンパイルは一応通ってるとは思うんですけど・・・・・。
とりあえずソースを晒すといいかも
GTK以前に hello worldとかを compile & 実行できているかが気になる。
>>898 エラーがで出てたのは、このウィジェットだけを配置する
プログラムなんですが、
#include <gtk/gtk.h>
int main(int argc,
char *argv[])
{
GtkWidget *window;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
GtkWidget *button5;
GtkWidget *table;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
table = gtk_table_new(10,10,FALSE);
gtk_container_add(GTK_CONTAINER(window),table);
button1 = gtk_button_new_with_label("BTN1");
button2 = gtk_button_new_with_label("BTN2");
button3 = gtk_button_new_with_label("BTN3");
button4 = gtk_button_new_with_label("BTN4");
button5 = gtk_button_new_with_label("BTN5");
//前半
//後半 button1 = gtk_button_new_with_label("BTN1"); button2 = gtk_button_new_with_label("BTN2"); button3 = gtk_button_new_with_label("BTN3"); button4 = gtk_button_new_with_label("BTN4"); button5 = gtk_button_new_with_label("BTN5"); gtk_table_attach_defaults(GTK_TABLE(table),button1,0,2,0,10); gtk_table_attach_defaults(GTK_TABLE(table),button2,2,4,0,10); gtk_table_attach_defaults(GTK_TABLE(table),button3,4,6,0,1 ); gtk_table_attach_defaults(GTK_TABLE(table),button4,6,8,1,2 ); gtk_table_attach_defaults(GTK_TABLE(table),button3,8,10,2,3); gtk_widget_show_all (window); gtk_main (); return 0; }
902 :
login:Penguin :2007/03/20(火) 16:16:54 ID:SW3xr29J
>>899 不安になってやってみたら「hello, world」も同じエラーがでてきてできませんでした..orz。
#include<stdio.h>
int main() {
printf("hello, world");
return 0;
}
gtk+ チュートリアルのへろーわーるどは実行できるんですけど、
プログラムが終わると同じエラーがでてきます。
ぐぐったら、文字コードが関係してるらしいんですが、どれでやってもダメでした。
LINUXでやれっていうことなんですかね............。
mingwをインストールしなおせ
>>897 syntax error near unexpected token `main('
これは実行時ではなくてコンパイル時のエラーメッセージではないのか。
あのね、ここはLinux板でしてね win32-portのことならム板にスレがあるからそっちに行ってほしいんだ
>>906 ム板には無いような気がするなぁ。
マイナーGUITKを「紹介するだけ」のスレはあるようだけど。
見落としてる?
>>908 GTKやめて、FOX Toolkitで作るといいよ
>>909 突然、何?
なにかが気に障ったなら謝るよ。ゴメンナ。
>>900 int main(int argc,
char *argv[])
を
gint main(gint argc,gchar *argv[])に変えてみろ
913 :
login:Penguin :2007/03/29(木) 16:50:34 ID:dC+/1rKX
GTKのwidgetにMozillaをのっけてアプリケーションを作った人いますか? 不具合とかあったら教えてください!
914 :
login:Penguin :2007/04/01(日) 02:44:59 ID:RjtNty3y
すいません、質問させてください。文字を90度回転させるにはどうしたらいいですか?
ついに、自前の C++ マーシャラーを作成して、シグナルにコネクトできるようになったぜ! こんな感じ。 class Test { public: Test() : dummy(123) { } void hello (GtkWidget *widget, gpointer data); private: int dummy; }; void Test::hello (GtkWidget *widget, gpointer data) { g_print ("Hello World C++ %d\n", dummy); } g_signal_connect_cc (button1, "clicked", &test, &Test::hello, 0); これで、button1をクリックすると、 Hello World C++ 123 と出力される。v(^O^)v 素の GTK+ を使いつつ C++ でプログラム出来るのはかなりおいしい。
>>914 GTKをインストールした時についてくる gtk-demo で、
Rotated Text というのがあるので、それを見たらいいと思う。
gtk-demoでソースも見れるよ。
>>915 あ、それよさげ。
全体としてはC++でコーディングしたいけど、GTK+周りは初心者なので
素のCでやりたいと思ってた。gtkmmとか使うのも考えたけど、本家(?)の
GTK+の方が情報揃ってそうだったし。
918 :
915 :2007/04/04(水) 03:16:21 ID:4cUWSG/i
こんな時間になったけど、めげずにカキコ。 GTK+ が他のツールキットと違うのは、コールバック関数を呼び出す際に、 引数をスタックに積まないで、ヒープに型情報と共に保存して、 シグナルに登録されたマーシャラーを呼び出す。 呼び出されたマーシャラーは、データを取り出して、コールバック関数に 合った方法で引数に変換して、コールバック関数を呼び出す。 というところまで分かったんで、だったら、C++ のメソッドを呼び出せる ように出来るんじゃないかと思ったのがきっかけ。 gtkmm を使いたくないのが一番の理由だけどw とりあえず、これからブログを開設するんでwwwそっちに載せるつもり。
919 :
914 :2007/04/04(水) 20:46:07 ID:fydXVgVP
>>916 情報ありがとうございますm(_;_)m
gdkのpangoインターフェースというのがあるんですね。
(でも2.6からみたいなので拙の2.4ではだめかも…)
textviewについて質問です 表示行数を増やしたときに、その新しい行が見えるように、一番下までスクロールすることにしました。 text_buffer_insertして end_iterにscroll_to_iterしています。 しかし、これを実行しても、最後の行までスクロールされません 最後のカーソルがひとつあるだけの行と、その上の行が見えません(つまり、こちらの意図より2行うえにずれてる) もちろん、スクロールバーも、下がちょびっと残っていて、一番したまでぴったり動きません テキストビューを一番下までスクロールする方法を教えてください
>>920 mark = gtk_text_buffer_get_mark (buffer, "end");
gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark);
gtk_text_view_scroll_mark_onscreen (textview, mark);
してるかな?
詳しくは gtk-demo を。
ありがとうございます! markはよくわからなかったのでスルーしてました。 試してみます!
923 :
915 :2007/04/15(日) 01:36:33 ID:RFcvtVMo
質問です。 GtkFrameなど、newに引数を取るようなウィジェットを継承するときは、 新しいnewはどのように書けばいいんでしょうか?
同じように引数を取るようなコンストラクタを書けばいいと思うんだけども。 GtkAspectFrameがGtkFrameを継承してるから見てみては。
gtk_hogehoge_new() は継承されないから、べつに prototypeを合わせる必要はないんじゃない?
glade2を使ってGUIアプリを作ってみているんですが、 たとえばTextViewのシグナルをkey_press_eventなんかは 簡単に追加できますが、TextView.TextBufferのchangedなど を使いたい場合はgladeからは追加できないものなんでしょうか? そういうことをする場合はglade使わないほうが簡単?
おざなりだけど、できないんじゃないの。 glade2は Viewをいじくるもので、modelの面倒まではみてらんないんじゃ。
GtkTreeViewのノードを移動させたいんですが、moveメソッドでは 同レベル内での上下しかできませんよね? レベルの上げ下げを含む移動を行う場合は、移動したい先に appendして内容をコピー、元を削除、とするしかないんでしょうか? 子ノードも一緒に追随するように動かしたいんでそうすると再帰書いたりとか 随分面倒になりますが、もっとスマートな方法はないものでしょうか? ちなみにmodelにはTreeStoreを使っています。
930 :
login:Penguin :2007/06/10(日) 23:41:19 ID:yRMF1Vs7
931 :
login:Penguin :2007/06/26(火) 08:48:31 ID:4KV92bDj
どなたか御教授願います。 CListを使ってリスト表示していたときは列の文字位置を justity center とか left で指定出来たのですが treeview を使った場合はどうするんでしょうか? renderer で何か指定してやるんでしょうか?
>>931 GtkCellRenderer の xalign プロパティーを g_object_set() でいじる
>>931 GtkCellRendererText の "alignment" と "align-set" だと思う。
試してないけど。
934 :
login:Penguin :2007/06/27(水) 08:12:39 ID:YmGO7LQp
ありがとうございます。 御教授いただいたあたりを勉強してみます
詳しい方、ご教授お願いします。 自作のソフトキーボードを作ろうかと考えております。 GTKを使って、ダミーのキーイベントを送信 (例えば、画面上の何かのボタンを押したら、KeyPressのシグナルを発行する) ようなことはできますでしょうか?
>>936 ありがとうございます。
参考にしてみようと思います。
>X なら何だったけ、Xkb 関係だったけ、そういうのをいじった方が速いんじゃないかと思う。
説明が前後しましたが、もともと背景として、DirectFB上でうごかしたいなーというのがあり
GKTでのプログラミングに踏み切りました。
最終的にはIMを使って日本語入力まで行きたいのですが、壁は高そうですね・・・。
>>938 ありがとうございます。
このソースを参考にしたところ、どうもイベントはXlibのXSendEventで送るっぽいですね。
うーんXに依存しちゃうと、DirectFBで動かない気が・・・。
別の方法を考えるかなぁ・・・。
そういう部分は下のレイヤで書くべきであって、そこまで ツールキットにクロスプラットフォームを期待するのは変じゃね? 必要な部分だけ分離して書けばいいじゃん。 まあGTK+以外勉強したくないんですよぼくちゃん!ということかも知れんけど。
gdk_event_send_client_message とか g_signal_emit あたりでできないかな?
software keyboardを、hardware keyboard emulator (XEventや GdkEvent を発生するもの) って考えると、 使いにくいものになりそうな。 それよりも文字を入力したなら、GtkTextViewとかにひっつけて 必要なときに文字列を入れ替える、とかの方が contextとかを持ってこられるし、結構楽にできそうな気がする。 もちろん応用によるが。
ちょっと話がずれるけど、昔悩んでようやく分かったこと。 TextView で Enter を押したら、改行を入れずにこちらの都合の処理をする(例えばメッセンジャーなどでメッセージ送信)。 もちろん g_signal_connect(G_OBJECT(text_view), "key_press_event",.... するんだけど、IM のことを考えると IM の変換決定を優先させないといけない。 これをするにはコールバック関数で if (gtk_im_context_filter_keypress(text_view->im_context, event)) { text_view->need_im_reset = TRUE; return TRUE; } をしないといけない。でないと変換決定される前に自分の処理をしてしまう。 (変換途中の文字が TextView に入力されてない) ちなみにg_signal_connect_afterだと改行が先に処理されてしまう。 と言う訳で参考までに…。
944 :
943 :2007/07/10(火) 02:09:39 ID:coxuw40G
あ、ちなみに IM の種類(あとウィンドウマネージャの種類?)によってはなくても大丈夫なものもあったよ。 FreeBSD + anthy-scim はなくても OK だった。 FreeBSD + canna-kinput2 は必要だった。 Windows XP + IME は必要だった。
みなさんプロファイラってどれを使用していますか? 自分はSystemTap+valgrind+oprofile+PAPI-Cです。
946 :
935 :2007/07/11(水) 09:10:38 ID:zmQzup1l
みなさま、さまざまなアドバイスありがとうございます。 どうやら、GObjectもしくはGDKあたりでもイベントの作成はできそうですね。 その辺を中心に調べてみます。 (マニュアルが少ないんですよね・・・。本屋にGTK/GDKの本を買いにいったら絶版って言われました・・・) 942さんがおっしゃっている応用も検討して、CONTEXT回りもちょっと調べてみようと思います。 なかなか前途多難ですね・・・。 ありがとうございました。
947 :
942 :2007/07/11(水) 09:49:44 ID:4FYTLsLl
Contextっていっているのは technical termじゃなくて、一般的な文脈 (その GtkTextViewが何を欲しがってるか( JIS-X0208 or 英字 or 数字) とか) って意味だよ。 何を software keyboardの trigger にするつもりかわからないけど、keypress_eventでその triggerは hookできるよねえ、多分。
Gtk-2.12からgladeが取り込まれてGtkBuilderになる んだってさ。で、問題はいまのgladeファイルと 互換性がなくなるそうだ。まあ、変換スクリプトが あるらしいけどねえ。。。。
libgladeは取り込まれるの?
じゃなくてまた新しいライブラリになるらすい。 XMLそのまま持つのは気持ち悪いなあ。ふだんはインタプリタで読めるけど リリース時にはコンパイルできるようにならんかな。もしかして今でもできる?
ああ、ソースにXML書いて読み込めばいいのか。
薮から棒に質問ですがEcllipseでGTKを使いたいと思ってます。 下のソースで#include <gtk/gtk.h> が上手く行かないので test.h と言うヘッダを作って下に示すような変更で使おうとしています。 gtk.hの中身 #include <gdk/gdk.h> #include <gtk/gtkaboutdialog.h> 等をtest.hで #include <gtk-2.0/gdk/gdk.h> #include <gtk-2.0/gtk/gtkaboutdialog.h> に変更 それでも上手く行かないので何か妙案か、あるいはそのままのソースで コンパイルできる方法を探しています。なおソースは7年前の ターボlinuxではコンパイルでき、小さな窓が出ました。 「GTKではじめるXプログラミング」竹田 英二著 1999年 長すぎるためソースは分けて投稿します。
<続き>ここより下はソース #include "test.h" void hello(GtkWidget *, gpointer); void hello(GtkWidget *widget, gpointer data) { printf("Hello World!\n"); gtk_main_quit(); return; } int main (int argc, char *argv[]) GtkWidget *window; GtkWidget *button; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), NULL); gtk_widget_show(window); button = gtk_button_new_with_label("Hello World!"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hello), NULL); gtk_container_add(GTK_CONTAINER(window), button); gtk_widget_show(button); gtk_main(); return 0; }
べつにソースが悪いわけじゃないでしょ。 コマンドラインでコンパイルはできるの? 自分の予想はEclipseのCコンパイルとリンカのオプションを設定していないだけだと思われ。 ところで、余談なんだけど、最近"gtk_signal_connect"ってあんまり使わないの? "g_signal_connect"に置き換わったっていううわさをちらほら・・・。
Eclipseは分からんが、CCに渡すINCLUDE_PATHを適切に設定すべし。
gtk_signal_connect はまだ一応使えるよ。
っていうか、俺のコード gtk_signal_connect と g_signal_connect が混在しているし。
>>952 何がうまく行かないのかちゃんと説明しないと。
シグナル取り扱いがglibでサポートする枠組みに入ったから、 gtk_signal_connectはそれへのラッパーになった。
960 :
login:Penguin :2007/07/21(土) 12:33:03 ID:E0FaCFcF
すいませんLinuxにおけるVisualC++って どんなのがあるのでしょうか? KylixがあるみたいですがC/C++ですと何なんでしょうか それとDirectXみたいな環境はありますでしょうか? 要するにWindowsに負けるとも劣らないゲーム開発環境って Linuxにあるのでしょうか?
961 :
login:Penguin :2007/07/21(土) 12:36:45 ID:E0FaCFcF
GTKで印刷、印刷関連の設定などをおこなう関数や 簡単なサンプルはありますでしょうか。
gtk_window_set_geometry_hints()って関数の説明ってどこかに書いてありませんか? 検索したけど見付からず・・・。
967 :
952 :2007/07/28(土) 10:45:13 ID:l28gEhCG
お礼が遅くなりましたがレスありがとうございます。
ソースを提示しているのであとはコンパイルできる方が
いるかどうかを知りたかったものですから。
できる方がいれば自分の環境設定が悪いと言う結論になるので
環境設定をどうするかその方向で考えようとしてました。
>>954 >コマンドラインでコンパイルはできるの?
v1.2の頃にあった「gtk-config」が見付からないないので
コマンドラインでコンパイルは現状では難しい状態です。
>>955 >Eclipseは分からんが、CCに渡すINCLUDE_PATHを適切に設定すべし。
それ以外にも問題が有るようでして。
>>956 >その点から言うと、その本は捨てて Gtk2.x の tutorial を読むべきだな。
えぇ確かに。
>>957 ドイツ語も苦手ですが図が参考になり、かなり進展がありました。
まずはgtkmmがインストールしてから再度試行錯誤します。
>>958 >何がうまく行かないのかちゃんと説明しないと。
どのあたりで不都合が生じているのか手探りの状態でしたので、
明確に説明できなくて申し訳ありませんでした。
「どのあたりで不具合」を書けなんていってない。 「どういう不具合」かを書くんだ。詳細に。
>>968 ファイルが無いとコンパイラ(プリプロッセサ)に言われたヘッダを
インクルードした後にビルドするとコンソールに下のような出力があります。
最初のエラー3個までを示します。××××の部分は伏字としてさせて下さい。
make -k all
Building file: ../××××070727_01.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/include/glib-2.0 -I/usr/include/gtk-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0
-I/usr/include/firefox-1.5.0.12/system_wrappers -I/usr/lib64/gtk-2.0/include
-O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"××××070727_01.d" -MT"××××070727_01.d" -o"××××070727_01.o" "../××××070727_01.cpp"
/usr/include/glib-2.0/glib/gtypes.h:41: error: expected constructor, destructor, or type conversion before ‘typedef’
/usr/include/glib-2.0/glib/gtypes.h:90: error: expected initializer before ‘*’ token
/usr/include/glib-2.0/glib/gtypes.h:396: error: ‘G_END_DECLS’ does not name a type
ちなみに /usr/include/glib-2.0/glib/gtypes.hのLINE41は↓です。
typedef char gchar;
‘typedef’の前にconstructor, destructor, or type conversion
があって当然と言っているようですが、なぜ?と言う思いがあります。
連投失礼します。環境を明示してませんでしたので。 「64bit版Fedora core6」でEclipse+CDTです。
>>952 手作業でGTK+のヘッダを入れたりする代わりにpkg-configつかえ。
gtk1.2でいうgtk-configのかわりだ。
あと、GTK本家サイトのAPIドキュメントかdevhelpを常に確認できるようにしとけ。
急がば回れ。 eclipse も cdt も捨てて、チュートリアルの HelloWorld ウィンドウの表示からやれ
>>971 えぇ、そうします。
>>972 単にコンソールへの出力であれば既にできていますが
チュートリアルも最初から見てみます。
974 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 02:02:07 ID:EgyXknh4
親window生成 → vbox(コンテナー)生成 → ボタン生成(vboxに乗っける) → pixmap生成、シグナルハンドラ生成(ボタンに対して) を作った場合、windowは残してコンテナーのvboxをdestroyすると、↑のpixmapやhandlerは自動的にdestroyされるんでしょうか? objectが残ってメモリーリークの原因になったりしないでしょうか?
destroyが呼ばれたかどうか確認すりゃいいじゃん。 きっと、974のレスより少ないタイプ数で確認できる。
>>974 普通は親(vbox)が死ねば、子供もみな殺させる(destroy)はず。
g_object_ref()してれば、生き残るけど。
>殺させる 殺される、ね。
ちょっと気がついたけど、pixmap って GdkPixmap のこと? GdkPixmap を作って GtkImage にしてボタンに乗せるんだったら、 GdkPixmap は destroy されないなあ。 GtkImage は destroy されるけど。
三つのボタンがあって、どのボタンを押したかによってラベルの内容を変えたいとき、 みなさんはどのようなデータをコールバック関数に渡していますか? 少なくとも ・どのボタンが押されたか ・変えたいラベルのポインタ の二つはコールバック先に渡す必要があると思うのですけれど、その方法が お聞きしたいです。 私は構造体をつくってその中にラベルへのポインタとボタンのIDを入れているのですが、 もう少しスマートな方法がないかと思ったので。
どっちか片方でいいんじゃないの?
変えたいラベルってのは gchar* じゃなくて GtkLabelのことか。 つまり、文字列を変えたいだけじゃなくて、変える対象も ボタンによってちがうってことか。 あまり綺麗じゃないが g_object_set_data() で GtkButtonに そういう情報を結びつけとく手もあるな。 これだと userdataはいらん。
>>981 なるほど、そういう方法があったのですね。試してみたいと思います。
あと変えたいラベルはGtkLabelなのですが、変える対象は全て同じラベルです。ひとつのラベル対して
複数のボタンからアクセスが来たとき、ということが言いたかったのですが、この場合は何かうまいやり方
でもあったのでしょうか。グローバル変数でLabelのアドレスを渡しておくのが楽だとは思うのですが、それ以外で。