scieditor2 2 version 4

2019/08/19 16:35 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2  2
190801
- 行の文字数をまず取得して多かったらアウトライン行の可能性はないから読み込まずにパスする仕様にした
- お気に入りフォルダはタブにして検索窓を用意した
→ スプリッタの位置簿保存の仕方がわかんない┐('д')┌

---
190818
# 設定の保存
- ソフト全体の位置とスプリッタの位置を保存できるようにした
- スプリッタの保存関数はバイト列を返すのでバイナリになる。レジストリは嫌なのでiniにしたい、そうなると文字列への変換が必要だ。調べたら、QSettingsを使える、これはwinだとレジストリだと思ってたがiniにもできる。paythonのconfigparserでも良いんだろうけど、Qtの方が簡単そうだ。
- で、文字列変換で悩んだ。Qtを使ってるとバイトもQtの型だから単純にpythonの組み込み関数を使えなかったりする。QStringを使おうと思ったらQtの現在バージョンにはもう存在しないオブジェクトで、じゃあどうやれば良いのかと悩んだが、今回に関しては全く悩む必要は無く、文字列に変換せず、iniにバイト列を直接書き込めた
- こんな感じで書き込まれる
splittergeo=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1\x64\0\0\x1\x41\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
- QSettingsは文字列とバイト列を気にしなくて良いみたい、便利だ!

```
#save
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        byte=self.saveGeometry()
        setting.setValue('geometry',byte)
        setting.setValue('splittergeo',self.ui.splitter_2.saveState())

#load
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        try:
            self.restoreGeometry(setting.value('geometry'))
        except:
            pass
        try:
            self.ui.splitter_2.restoreState(setting.value('splittergeo'))
        except:
            pass

```
- こんな感じで簡単、自動的に[gneral]で保存された
- 設定ファイルって初動時、ファイルやエントリが無い場合の書き方が難しい。エントリについては読み込むときに無い場合のデフォルト値を指定できるんだけど、今回はバイナリだからどう指定して良いのかわかんない┐('д')┌
- 仕方なくtryでpassすることにした

# 新規作成
- designerでメニューに項目を追加した
メニューのスロット設定がよくわからなかったけど何とか出来た
既存の関数 makenewtab をスロットにしたら、この関数はタブ名も引数にしてあったのでエラーではじかれた





----
---> [scieditor2 #](https://mimemo.io/m/zeXgworpjz4K0Ek)
      

190801

  • 行の文字数をまず取得して多かったらアウトライン行の可能性はないから読み込まずにパスする仕様にした
  • お気に入りフォルダはタブにして検索窓を用意した
    → スプリッタの位置簿保存の仕方がわかんない┐('д')┌

190818

設定の保存

  • ソフト全体の位置とスプリッタの位置を保存できるようにした
  • スプリッタの保存関数はバイト列を返すのでバイナリになる。レジストリは嫌なのでiniにしたい、そうなると文字列への変換が必要だ。調べたら、QSettingsを使える、これはwinだとレジストリだと思ってたがiniにもできる。paythonのconfigparserでも良いんだろうけど、Qtの方が簡単そうだ。
  • で、文字列変換で悩んだ。Qtを使ってるとバイトもQtの型だから単純にpythonの組み込み関数を使えなかったりする。QStringを使おうと思ったらQtの現在バージョンにはもう存在しないオブジェクトで、じゃあどうやれば良いのかと悩んだが、今回に関しては全く悩む必要は無く、文字列に変換せず、iniにバイト列を直接書き込めた
  • こんな感じで書き込まれる
    splittergeo=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1\x64\0\0\x1\x41\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
  • QSettingsは文字列とバイト列を気にしなくて良いみたい、便利だ!
#save
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        byte=self.saveGeometry()
        setting.setValue('geometry',byte)
        setting.setValue('splittergeo',self.ui.splitter_2.saveState())

#load
        fname=r'<fullpath>'
        setting=QSettings(fname,QSettings.IniFormat)
        try:
            self.restoreGeometry(setting.value('geometry'))
        except:
            pass
        try:
            self.ui.splitter_2.restoreState(setting.value('splittergeo'))
        except:
            pass

  • こんな感じで簡単、自動的に[gneral]で保存された
  • 設定ファイルって初動時、ファイルやエントリが無い場合の書き方が難しい。エントリについては読み込むときに無い場合のデフォルト値を指定できるんだけど、今回はバイナリだからどう指定して良いのかわかんない┐('д')┌
  • 仕方なくtryでpassすることにした

新規作成

  • designerでメニューに項目を追加した
    メニューのスロット設定がよくわからなかったけど何とか出来た
    既存の関数 makenewtab をスロットにしたら、この関数はタブ名も引数にしてあったのでエラーではじかれた

---> scieditor2 #