ホーム » Qt

Qt」カテゴリーアーカイブ

QListWidgetからItemを削除

QLIstWidgetのリファレンス

QListWidgetの項目削除はメソッド「takeItem」を使用する。

removeItemWidgetでは削除できない。

QToolbarの色を設定

QWidget上にQToolbarを配置するとQToolbarが黒く表示されることがある

色を設定するにはQToolbarのsetStyleSheetを使用

toolbar = QToolBar(親のWidget)
toolbar.setStyleSheet(“background-color: rgb(240, 240, 240)”)

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デザイナで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がどうしても追加されない。

Qt BottomDockWidgetAreaをCentral WidgetとRightDockWidgetAreaの下に配置

Central WidgetとRightDockWidgetAreaが配置されたQMainWindowにBottomDockWidgetAreaを追加すると
Central Widgetに下、もしくはRightDockWidgetAreaの下にBottomDockWidgetAreaに配置される。

BottomDockWidgetAreaをCentral WidgetとRightDockWidgetAreaの下に配置するにはBottomDockWidgetAreaを配置した後に
以下のコードを実行すればよい

[code]
mainWindow->setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea);
mainWindow->setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
[/code]

Qtデザイナ

CentrlaWidgetの設定

Visual Studio 2015でQString型の変数の値を見る

Visual Studio 2015でQGISをデバッグするとQString型の変数の内容が見れない。

Watch式に(char*)変数名.d+変数名.d->offset,su と記述すると見れる

PythonとQtでListView

VisualStudio等で開発しているとおなじみのListView

clip_8

これをQTで実現するにはQTreeViewを使用する。

QtデザイナでダイアログにTreeViewを配置して以下のコードを実装。

        model = QStandardItemModel(0,3)
        model.setHeaderData( 0, Qt.Horizontal, ('名称').decode('utf-8'))
        model.setHeaderData( 1, Qt.Horizontal, ('都道府県').decode('utf-8'))
        model.setHeaderData( 2, Qt.Horizontal, ('自治体').decode('utf-8'))

        self.ui.treeView.setRootIsDecorated(False)
        self.ui.treeView.setItemsExpandable(False)
        self.ui.treeView.setModel(model)
        # view.setUniformRowHeights(True)
        model.setItem( 0, 0, QStandardItem(("山田花子").decode('utf-8')))
        model.setItem( 0, 1, QStandardItem(("東京都").decode('utf-8')))
        model.setItem( 0, 2, QStandardItem(("豊島区").decode('utf-8')))
        model.setItem( 1, 0, QStandardItem(("斉藤淳").decode('utf-8')))
        model.setItem( 1, 1, QStandardItem(("埼玉県").decode('utf-8')))
        model.setItem( 1, 2, QStandardItem(("所沢市").decode('utf-8')))

clip_10