SVGファイルをシンボルに使う
Pythonコンソールにて

[code]
dict = {}
dict[‘fill’] = ‘#FFFF00’
dict[‘name’] = ‘c:\\work\\abc.svg’
dict[‘size’] = ’10’
sl = QgsSvgMarkerSymbolLayer.create(dict)
sym = QgsSymbol.defaultSymbol(QgsWkbTypes.PointGeometry)
sym.changeSymbolLayer(0, sl)
renderer = QgsSingleSymbolRenderer(sym)
iface.activeLayer().setRenderer(renderer)
iface.activeLayer().triggerRepaint()
[/code]

QGIS Pythonプラグインで起動時に地図を表示
Pythonで作成したプラグインで起動時に地図を表示すると、
起動後「現在のプロジェクトを保存しますか」の問い合わせメッセージが表示される。
サンプルコードでは関数:initGuiの中でプロジェクトの投影を設定する。
プラグインはQGIS起動時にロードされるようにプラグインのチェックをONにする

[code]
def initGui(self):
途中省略
new_crs = QgsCoordinateReferenceSystem(‘EPSG:2451’)
QgsProject.instance().setCrs(new_crs)
[/code]
これで起動後に以下のメッセージが表示される

QGISのソースをチェックはしていないが、プラグインがQgsProjectを操作した後にQGISのappクラスでQgsProjectを操作しようとしてこのような動作になっていると思われる。
これを避けるためにはQGIS起動時に実行されるPythonスクリプトを用意してこのスクリプトで起動時に実行したいスクリプトを呼ぶと期待した動作となる。
ちなみに起動クリプトの内容は以下
[code]
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QDesktopWidget
from qgis.utils import iface
import qgis
qgis.utils.loadPlugin(‘プラグイン名’)
qgis.utils.startPlugin(‘プラグイン名’)
[/code]
QDockWidgetのタイトルを消す
[code]
dockwidget = QDockWidget()
dockwidget.setTitleBarWidget(QWidget())
[/code]
消去前

消去後

Pythonの変数のスコープとWidget
ローカル変数に格納したWidgeのインスタンスはスコープを外れるとなくなる
これはQGISのプラグイン開発時にふと違和感を感じたPythonの仕様?
関数initGuiの中でQDockWidgetのインスタンスをローカル変数「mainpanel」にセットして
画面に追加すると正しく表示されない
しかしクラスのメンバー変数にセットすると正しく表示される
本来はaddDockWidgetした時点でインスタンスは他で保たれるであろうから表示されないことはない気がするが・・・
正しく表示されない例
[code]
def initGui(self):
mainpanel = MainPanelDockWidget()
self.iface.addDockWidget(Qt.RightDockWidgetArea, mainpanel)
self.dockwidget.show()
[/code]
正しく表示される例
[code]
def initGui(self):
self.dockwidget = MainPanelDockWidget()
self.iface.addDockWidget(Qt.RightDockWidgetArea, self.dockwidget)
self.dockwidget.show()
[/code]
QtデザイナでSplitterを配置
QDocWidget上にSplitterを配置
QWidgetを左右に配置

2つのQWidgetを選択して「ツールバー」の「水平にスプリッタの中に並べる」を選択

以上で2つのQWidgetがSplitterに配置される
Splitterが親のQDockWidget一杯に表示されるようにdockWidgetContentsを選択して「ツールバー」の「水平に並べる」ボタンをクリック
以上

QtデザイナでQDockWidgetをベースにレイアウトをデザインすると何も部品が置けない(2)
QDockWidgetにQWidgetが追加されないため、uiファイルを直接編集してQWidgetを追加。
編集前
[code]
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DockWidget</class>
<widget class="QDockWidget" name="DockWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="allowedAreas">
<set>Qt::AllDockWidgetAreas</set>
</property>
<property name="windowTitle">
<string>DockWidget</string>
</property>
</widget>
<resources/>
<connections/>
</ui>
[/code]
編集後
[code]
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DockWidget</class>
<widget class="QDockWidget" name="DockWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="allowedAreas">
<set>Qt::AllDockWidgetAreas</set>
</property>
<property name="windowTitle">
<string>DockWidget</string>
</property>
<widget class="QWidget" name="dockWidgetContents">
</widget>
</widget>
<resources/>
<connections/>
</ui>
[/code]
Qtデザイナで再度uiファイルを開くと正しくQWidgetが追加されている

QtデザイナでQDockWidgetをベースにレイアウトをデザインすると何も部品が置けない(1)
Qtデザイナを起動してメニュー「ファイル」-「ファイルを新規作成」を選択し以下に従ってデザイナ画面を起動





本来DockWidget配下にQWidgetが表示され、その上に部品を配置することができる。
しかしDockWidget配下にQWidgetがどうしても追加されない。
QGIS3+Eclipse+PyDevでデバッグ
環境
| OS | Windows10 64bit |
| QGIS | QGIS3.4.4(OSGEO4W 32bit) |
| Eclipse | 2018-12 64bit |
| Java | Oracle JRE 10 |
| PyDev | 7.1.0.201902031515 |
QGISをインストール
OSGEO4W版のインストーラーを起動しC:\OSGEO4Wにインストール



QGISを起動

Eclipse
以下よりEclipseをダウンロード
https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2018-12/R/eclipse-inst-win64.exe
ダウンロードしたeclipse-inst-win64を実行
起動すると以下のメッセージ表示

Eclipseのサイトより「Oracle JRE 10」をダウンロード
https://download.eclipse.org/oomph/jre/index-handler.php?vm=1_1_7_0_64_0&pn=Eclipse%20Installer&pu=http://wiki.eclipse.org/Eclipse_Installer&pi=http://download.eclipse.org/oomph/jre/128×128.png

ダウンロードした「jre-10.0.2_windows-x64_bin」を実行

インストールボタンをクリック

再度「eclipse-inst-win64」を実行
eclipse インストーラーが起動されたら「eclipse IDE for java developers」を選択


証明書の確認


PyDev
Eclipseを起動してHelpメニューの「Install New Software」
「Work With」の「Add」ボタンをクリック
NameにPyDev、Locationに「http://pydev.org/updates」を指定しAddボタンをクリック

PyDevをチェックしてNEXTボタンをクリック



Detaileボタンを押してPydevのインストール先を確認してから「Install Anyway」を実行

PyDevの設定
Eclipseを起動して「Window」→「Preferences」を選択
左のTreeでPyDev-Interpreters-Python Interpreterを選択

QGISが使用するPython.exeを指定するためにQGISを起動してPYTHONHOMEの値を確認

「Browse for pythonpypy exe」ボタンを押してNAMEには任意の名称(ここではpython37)、値には先ほど調べたPython.exeのフルパスを指定。
Librariesは自動でいくつかの参照先が指定されるが手動で不足分を指定
先ほどインストール先を確認したPyDevも指定
Packagesには警告らしき表示があるが無視

Forced Builtinsのタブを表示して「New」ボタンを押してqgisとPyQt5をそれぞれ登録


Environmentoタブを表示して以下の環境変数を設定

「Apply」ボタンを押して「Apply and Close」ボタンを押して設定を反映
設定内容が即反映されないので「Apply」ボタンを押したら暫く待つこと。
※設定が終了する前に画面を閉じると正しく設定が終了しない
デバッグの準備
外部TOOLにQGISを設定
メニュ「Run」-「External Tools Configurations」を指定して外部TOOLとしてQGISを設定

プロジェクトを作成
Eclipseの「New」メニューから-「Project」-「PyDev Project」を選択

以下に従ってプロジェクトの内容を設定しFinishボタンを押す

確認のためにQGISのPlugin Builder3でプラグインを作成して「C:\Users\ユーザー名\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\」に配置
init.pyに以下を記述
[code]
import os,sys
sys.path.append("C:\\Users\\kernel\\.p2\\pool\\plugins\\org.python.pydev.core_7.1.0.201902031515\\pysrc")
import pydevd
pydevd.settrace()
[/code]
sys.pathに追加しているのはPyDev
この記述はEclipseを使用しないときはエラーとなる
これを記述するとclassFactory関数でブレークする
デバッグ実行
ここからの操作は若干確信がないが、とりあえず正しく動作したので良しとして説明
プラグイン「Remote Debug」と「Plugin Reloader」を有効にするためにプラグインの設定で実験的プラグインも表示する


デバッグボタンを押す

「start pydev Server」ボタンをクリック

「外部TOOL QGISを起動」


iOS アプリをAdHocでインストール
Xcodeのバージョンが10.1になったのであらためてiOSアプリの作成からAdHocでインストールするまでをおさらい!
最初にXcodeでSingle View Appを作成
最近はXcodeが勝手に証明書関連を設定してくれるが、なぜかうまくいかなかったので手動で設定する
Apple DeveloperにログインしてProductionの証明書を確認
証明書はXcodeのPreferencesをクリックしてして表示される画面の左下+ボタンで作成可能
App IDを作成
DeviceにAdHocでインストールしてするデバイスを追加
AdHocで使用するProvisioning Profilesを作成
以上でçの作成は終了
XcodeのPreferencesからAppleIDの画面を表示して「Download Manual Profiles」ボタンを押してAdHoc用のProvisioning Profilesをダウンロード(していると思う・・・)
xcodeを開いてSigningのチェックを外しProvisioning Profilesに作成したAdHocを指定する
これからAdHoc用のコンパイルを開始するが、その前にProductメニューのDestinationをGeneric iOS Deviceに設定。この設定をしないとProductメニューのArciveが有効にならない。
ProductメニューのArciveを実行
「Distribute App」ボタンをクリック
AdHocを選択
optionを指定
証明書とProvisioning Profilesを指定
Exportボタンを押してipaファイルの出力先を指定。
iPhoneにインストール
iTunesを起動してiPhoneを接続
iPaをiTunesの左パネルの自分のデバイス上にドラッグしてインストール
ちなみにiTunes 12.7.3.64では正しくインストールできたが、12.8.2.3ではドラッグできなかった?
















