堕天使の煉獄
2016-08
29
07:05:55
まだまだ知らないことばかり
一段落ついて、一眠り~としてたら、横になってふーと一息つくと、やっぱ出てきちゃうんですよね。あそこはこうしてれば、とか、あそこはこうすべきだ~とか。
そんな感じで、結局1から組み直しとかすることに(ぉ
まず、もう統合アーカイバ系のDLLは最初から使わない方向で。書庫ファイルかどうかのチェックも、アーカイバ内ドキュメントみるに、チェックの強度で、「標準」てのが、ヘッダのチェック。これは多分。localヘッダとcentralヘッダの重複部分のチェックだとおもわれ。これは普通に自前の読み込みルーチンの中でやってる。チェックの一番キツイ奴でも、ヘッダ内のcrc32の項目の値と、圧縮ファイルのcrc32の値を再チェックするという項目が増えるぐらいのもののようで。それは現状自前のではやってないんですけど(ファイルデータからcrc32の値取得するのってどのくらいコスト掛かるのかもよくわかってないってのもあって)とにかく、その辺ももう、自前でやってるんだなとおもうと、もう完全にアーカイバDLLいらんやん。ってことに。
んで、それをパージすることで何が得かというと、windows.hをインクルードしなくて済む用になるということ。
windows.hインクルードすると、大量のdefineマクロが追加されて、名前空間をレイプしやがるので、出来ればしたくないものであります。
vcだとそこまで気にならないのですが、Qt creatorだと、ファックされた名前空間からどばどばと使うあてもない候補が並んで、欲しいものを探すのに苦労する(そうならないように細かく名前空間とか別けてるのに…)のがなんともファッキンです。
で、それでアーカイバDLLつかわなければwindows.hも使わなくていいなーとおもったのですが。もう一個windows.hが必要なもの内部で使ってたのを思い出す。
……ゴミ箱。
ファイルを削除するときに、ゴミ箱にいれるっていうのは、windowsのshellの機能とかなんとかで、windows.hとともにShellAPI.hのインクルードが必要で、そんでまたなんとも使いにくい仕様のSHFileOperationとかいうAPIを使わないと、ゴミ箱にファイルを捨てる事が出来ないという。
で、アーカイバDLLパージしたのに、ゴミ箱の所為で結局windows.h外せないのかよ。とかおもったのですが、そこで、そうかこれ、コマンドラインでファイルパス渡して、渡された物をゴミ箱に放り込むという別アプリにしてしまえばいいのかと。
……windows.h使いたくないだけのために、exeにファイルをドラッグするとファイルがゴミ箱に捨てられるだけのアプリを組むとか、なんだかなぁ……な感じですが。でも今後もQTつかうんならまあ便利かなと言う気も。
で、いざ作ろうと思ったところで。
うまく動かない~。
exeファイル単体にエクスプローラ上でファイルをドロップするときはちゃんと動くんだけど、QT上でQProcessから実行すると、「QProcess: destroyed while process still running」とかでたうえで、ゴミ箱にファイルはいらなーい。
なんかプロセスが終了出来てないのに終了しようとしたよ? ってきなメッセージだとおもうのですが。
コンソールアプリの最後はgetcharでキー入力待ちしてるのだけど、それはcloseWriteChannelというもので回避出来るはずなので、自動でプロセスは終わってるはずなんだけどなぁ……。
QProcessでは別プロセスを開始するのに、startとexecuteそれにstartDetachedと
いうのがあって、startは子プロセスとして。startDetachedは独立したプロセスとして起動するんだとか。executeはstartとなんか違うらしいのですが、サンプルが見つからなかったのでよくわからず。
とりあえずstartDetachedに変えてみたら、コンソールが表示され、ゴミ箱にファイルを送れるようにはなる。
が、なんかおかしい。
動作的には、書庫ファイルの中身編集した結果を、メモリバッファ上にファイルイメージを構築。それが終わったら、元ファイルをゴミ箱にすて、元ファイル名と同じ名前をつけてメモリバッファ上のものをファイルとして保存。
てな感じの上書きプロセスなんだけど、実行してみると、ファイルがゴミ箱に行くだけで、元ファイル名のファイルは保存されてない。
……というか、「上書き保存」の後に「ゴミ箱に捨てる」が実行されてるっぽいw
完全に独立した別プロセスだとこうなっちゃうのか……w
ウェイトかけるてのじゃ確実性に欠けるし、動作も遅くなるしなぁ。
あと、コンソールも表示されないのが期待動作だったのだけども、なんでか出てるなと。おなじコンソールアプリのUnifyZipはコンソールでないのになんで?
で、そもそも、思い違いをしてたのが、何も表示されないアプリ作るのって、コンソールアプリじゃなくて普通のwin32アプリを使うのが普通なのですね……。単純にウィンドウを表示しないアプリを作ればよかったのか。
エラーの時はメッセージボックスつかえるので、標準出力とか使わないで良いし。
そんでもって、実行ファイルのサイズも、コンソールアプリだと300kbぐらいだけど、win32の場合は80kbぐらい(vcのランタイムの依存度が高いんだろうな)
なんか、ウィンドウも出さない、極小のプログラムを書くときは、コンソールアプリ。っていう先入観もってたなーと。
で、win32アプリでゴミ箱exeつくってQProcessで実行してみたところ。
普通にstartで期待道理の動作に。ちゃんと終わったら勝手にちゃんとプロセスも終了してくれてるっぽい。
これで晴れてwindows.hの排除に成功~。これまたへんな回り道しちゃったなぁ……。
あとは、レイアウトの見直し。
やっぱ画像のプレビュー画面が小さい。
しかし、今まで使ってた書庫ではなく普通にファイルを追加するタイプの画像編集ソフトでは、設定画面がメニュー→設定で開いて設定して、その画面は閉じたあと、編集後の状況が見えるって感じの作りで。
やっぱ編集設定見ながら、設定適用後のものをみたい。設定変えたら即反映。
ってのがやりやすいなというのがあって、そういうレイアウトにしてたのですが。
プレビュー画面の幅を圧迫しちゃうなーと。
一応画像プレビューは拡大縮小もできるのですが……いかんせん、QGrahicsVeiewの拡大縮小はえらく汚いんですよね。一番クオリティの高いやつえらんでもこれ。アンチェリつけるオプションとかもあるけど、つけても汚い画像がぼやけるだけというありさまw
なので完全にプレビュー専用ですねこれは。
適用後の画像(リサイズ後)なんかは、リサイズ処理した後の画像をQGrahicsVeiewに再設定するので、100%表示のときは、編集結果も普通に綺麗に表示されるから、そこまで気にする物でもないのかもだけど。
この辺は本気で対応しようとするとかなりめんどくさそうぽ……。
でも、やっぱ編集設定画面は表示しつづけたい。
レイアウトの範囲の取り合いになってる感じでどうしたモンかなと。
そこで、編集設定は別窓で表示することに。モードレスな子ウィンドウで。
それなら消したいときにいつでも消せるし、表示場所もサイズも変えられるし。プレビュー画面も大きく取れるようになるし。
んでもって。
実際運用してみて感じたのが、複数の書庫を放り込むと、解析中にかるくハングる。QTは処理待ちで長時間とまると落ちる仕組みになってるらしくQApplication::processEventsをちょいちょいよびだしてイベントを処理してやらないといけないらしい。
が、それで落ちなくなっても、処理待ちの間は応答不能になるので、これもやっぱ別プロセスで読み込み部分は作るべきだなと。
そうすれば読み込みの進行度とかもプログレスバーで表示とか出来るし。
それから登録する書庫ファイルリストはそんな登録しないので良いとして、書庫内のファイルリストを表示する部分は、数十程度なら気にならないけど、数百ファイルとなると、リストの更新がもっさり。
QTableWidgetでなく、QTableViewに変えるべきだろうな。ファイルリストのほうは。
両者の違いは、後者はモデルとビューが別れている、いわゆるMVCってやつですね。なので、データの量がどんだけ増えてもそれほど重くならない。
前者のは、更新の毎に前アイテム構築しなおすので数件とか数十件程度ならそれほど気にならないけど、それ以上になると、かなり厳しいです。
てかこの辺は実のところ、とりあえず今は前者のパターンで。
うまく全体的に動くの出来たら後から置き換えようと思ってた部分ではあるのだけども。
一旦モデルビューにしてしまうと、後からデータ構造の変更とか面倒なので。
先にとりあえず作っちゃってから変更の余地無くなったところで置き換えぐらいが面倒少ないかなというところもあって、残してた部分でもあるのですが。
やっぱ実際に数が増えると重い……。
とかまあ、ちょいちょい修正案も多く。
いつになったら終わるねん。という感じに。
あとはなにげにやっぱファイルサイズがすごいなと。
書庫編集アプリのexe自体は380KBぐらいと、そんなでかくもないのですが(小さくもないけど)
QTのランタイムも含めると、38MBに。
100倍だー!(野沢雅子調)
ちょっと作って配布~ってのにはでかすぎるなぁ(いやいまのところ配布とかする予定もないですけど)
そもQTのランタイムなんて、QT開発やってる人以外のPCにはまずはいってないし。ランタイムのver互換もないので、実行ファイルと同じ場所にランタイム同梱てのが最近は標準っぽいし。
その辺もいまいちQTの普及しない一因なのかなーとか。
そんな感じで、結局1から組み直しとかすることに(ぉ
まず、もう統合アーカイバ系のDLLは最初から使わない方向で。書庫ファイルかどうかのチェックも、アーカイバ内ドキュメントみるに、チェックの強度で、「標準」てのが、ヘッダのチェック。これは多分。localヘッダとcentralヘッダの重複部分のチェックだとおもわれ。これは普通に自前の読み込みルーチンの中でやってる。チェックの一番キツイ奴でも、ヘッダ内のcrc32の項目の値と、圧縮ファイルのcrc32の値を再チェックするという項目が増えるぐらいのもののようで。それは現状自前のではやってないんですけど(ファイルデータからcrc32の値取得するのってどのくらいコスト掛かるのかもよくわかってないってのもあって)とにかく、その辺ももう、自前でやってるんだなとおもうと、もう完全にアーカイバDLLいらんやん。ってことに。
んで、それをパージすることで何が得かというと、windows.hをインクルードしなくて済む用になるということ。
windows.hインクルードすると、大量のdefineマクロが追加されて、名前空間をレイプしやがるので、出来ればしたくないものであります。
vcだとそこまで気にならないのですが、Qt creatorだと、ファックされた名前空間からどばどばと使うあてもない候補が並んで、欲しいものを探すのに苦労する(そうならないように細かく名前空間とか別けてるのに…)のがなんともファッキンです。
で、それでアーカイバDLLつかわなければwindows.hも使わなくていいなーとおもったのですが。もう一個windows.hが必要なもの内部で使ってたのを思い出す。
……ゴミ箱。
ファイルを削除するときに、ゴミ箱にいれるっていうのは、windowsのshellの機能とかなんとかで、windows.hとともにShellAPI.hのインクルードが必要で、そんでまたなんとも使いにくい仕様のSHFileOperationとかいうAPIを使わないと、ゴミ箱にファイルを捨てる事が出来ないという。
で、アーカイバDLLパージしたのに、ゴミ箱の所為で結局windows.h外せないのかよ。とかおもったのですが、そこで、そうかこれ、コマンドラインでファイルパス渡して、渡された物をゴミ箱に放り込むという別アプリにしてしまえばいいのかと。
……windows.h使いたくないだけのために、exeにファイルをドラッグするとファイルがゴミ箱に捨てられるだけのアプリを組むとか、なんだかなぁ……な感じですが。でも今後もQTつかうんならまあ便利かなと言う気も。
で、いざ作ろうと思ったところで。
うまく動かない~。
exeファイル単体にエクスプローラ上でファイルをドロップするときはちゃんと動くんだけど、QT上でQProcessから実行すると、「QProcess: destroyed while process still running」とかでたうえで、ゴミ箱にファイルはいらなーい。
なんかプロセスが終了出来てないのに終了しようとしたよ? ってきなメッセージだとおもうのですが。
コンソールアプリの最後はgetcharでキー入力待ちしてるのだけど、それはcloseWriteChannelというもので回避出来るはずなので、自動でプロセスは終わってるはずなんだけどなぁ……。
QProcessでは別プロセスを開始するのに、startとexecuteそれにstartDetachedと
いうのがあって、startは子プロセスとして。startDetachedは独立したプロセスとして起動するんだとか。executeはstartとなんか違うらしいのですが、サンプルが見つからなかったのでよくわからず。
とりあえずstartDetachedに変えてみたら、コンソールが表示され、ゴミ箱にファイルを送れるようにはなる。
が、なんかおかしい。
動作的には、書庫ファイルの中身編集した結果を、メモリバッファ上にファイルイメージを構築。それが終わったら、元ファイルをゴミ箱にすて、元ファイル名と同じ名前をつけてメモリバッファ上のものをファイルとして保存。
てな感じの上書きプロセスなんだけど、実行してみると、ファイルがゴミ箱に行くだけで、元ファイル名のファイルは保存されてない。
……というか、「上書き保存」の後に「ゴミ箱に捨てる」が実行されてるっぽいw
完全に独立した別プロセスだとこうなっちゃうのか……w
ウェイトかけるてのじゃ確実性に欠けるし、動作も遅くなるしなぁ。
あと、コンソールも表示されないのが期待動作だったのだけども、なんでか出てるなと。おなじコンソールアプリのUnifyZipはコンソールでないのになんで?
で、そもそも、思い違いをしてたのが、何も表示されないアプリ作るのって、コンソールアプリじゃなくて普通のwin32アプリを使うのが普通なのですね……。単純にウィンドウを表示しないアプリを作ればよかったのか。
エラーの時はメッセージボックスつかえるので、標準出力とか使わないで良いし。
そんでもって、実行ファイルのサイズも、コンソールアプリだと300kbぐらいだけど、win32の場合は80kbぐらい(vcのランタイムの依存度が高いんだろうな)
なんか、ウィンドウも出さない、極小のプログラムを書くときは、コンソールアプリ。っていう先入観もってたなーと。
で、win32アプリでゴミ箱exeつくってQProcessで実行してみたところ。
普通にstartで期待道理の動作に。ちゃんと終わったら勝手にちゃんとプロセスも終了してくれてるっぽい。
これで晴れてwindows.hの排除に成功~。これまたへんな回り道しちゃったなぁ……。
あとは、レイアウトの見直し。
やっぱ画像のプレビュー画面が小さい。
しかし、今まで使ってた書庫ではなく普通にファイルを追加するタイプの画像編集ソフトでは、設定画面がメニュー→設定で開いて設定して、その画面は閉じたあと、編集後の状況が見えるって感じの作りで。
やっぱ編集設定見ながら、設定適用後のものをみたい。設定変えたら即反映。
ってのがやりやすいなというのがあって、そういうレイアウトにしてたのですが。
プレビュー画面の幅を圧迫しちゃうなーと。
一応画像プレビューは拡大縮小もできるのですが……いかんせん、QGrahicsVeiewの拡大縮小はえらく汚いんですよね。一番クオリティの高いやつえらんでもこれ。アンチェリつけるオプションとかもあるけど、つけても汚い画像がぼやけるだけというありさまw
なので完全にプレビュー専用ですねこれは。
適用後の画像(リサイズ後)なんかは、リサイズ処理した後の画像をQGrahicsVeiewに再設定するので、100%表示のときは、編集結果も普通に綺麗に表示されるから、そこまで気にする物でもないのかもだけど。
この辺は本気で対応しようとするとかなりめんどくさそうぽ……。
でも、やっぱ編集設定画面は表示しつづけたい。
レイアウトの範囲の取り合いになってる感じでどうしたモンかなと。
そこで、編集設定は別窓で表示することに。モードレスな子ウィンドウで。
それなら消したいときにいつでも消せるし、表示場所もサイズも変えられるし。プレビュー画面も大きく取れるようになるし。
んでもって。
実際運用してみて感じたのが、複数の書庫を放り込むと、解析中にかるくハングる。QTは処理待ちで長時間とまると落ちる仕組みになってるらしくQApplication::processEventsをちょいちょいよびだしてイベントを処理してやらないといけないらしい。
が、それで落ちなくなっても、処理待ちの間は応答不能になるので、これもやっぱ別プロセスで読み込み部分は作るべきだなと。
そうすれば読み込みの進行度とかもプログレスバーで表示とか出来るし。
それから登録する書庫ファイルリストはそんな登録しないので良いとして、書庫内のファイルリストを表示する部分は、数十程度なら気にならないけど、数百ファイルとなると、リストの更新がもっさり。
QTableWidgetでなく、QTableViewに変えるべきだろうな。ファイルリストのほうは。
両者の違いは、後者はモデルとビューが別れている、いわゆるMVCってやつですね。なので、データの量がどんだけ増えてもそれほど重くならない。
前者のは、更新の毎に前アイテム構築しなおすので数件とか数十件程度ならそれほど気にならないけど、それ以上になると、かなり厳しいです。
てかこの辺は実のところ、とりあえず今は前者のパターンで。
うまく全体的に動くの出来たら後から置き換えようと思ってた部分ではあるのだけども。
一旦モデルビューにしてしまうと、後からデータ構造の変更とか面倒なので。
先にとりあえず作っちゃってから変更の余地無くなったところで置き換えぐらいが面倒少ないかなというところもあって、残してた部分でもあるのですが。
やっぱ実際に数が増えると重い……。
とかまあ、ちょいちょい修正案も多く。
いつになったら終わるねん。という感じに。
あとはなにげにやっぱファイルサイズがすごいなと。
書庫編集アプリのexe自体は380KBぐらいと、そんなでかくもないのですが(小さくもないけど)
QTのランタイムも含めると、38MBに。
100倍だー!(野沢雅子調)
ちょっと作って配布~ってのにはでかすぎるなぁ(いやいまのところ配布とかする予定もないですけど)
そもQTのランタイムなんて、QT開発やってる人以外のPCにはまずはいってないし。ランタイムのver互換もないので、実行ファイルと同じ場所にランタイム同梱てのが最近は標準っぽいし。
その辺もいまいちQTの普及しない一因なのかなーとか。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
04
05
06
07
08
09
■
■
突撃したら道を間違えたてたでゴザル。
10
■
■
四川式回鍋肉うまい
11
[山の日]
12
13
14
■
■
もうちょっとで終わりそうだけど・・・
15
16
17
■
■
見間違え……
18
19
■
■
一難去ってまた一難……
20
21
22
23
■
■
ずるずる
24
25
26
27
28
■
■
ようやく一段落
29
■
■
まだまだ知らないことばかり
30
31
total:2080567 t:29 y:2908
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp