QString oldText = cb->currentText(); // 現在の文字を保存
cb->blockSignals(true); // イベントを一時的に無効化
cb->clear();
cb->addItems(items);
cb->setCurrentText(oldText); // 元の文字に戻す
cb->blockSignals(false); // イベント再開
よく使いそうな機能なので、ChatGPTといろいろやりとりしながら、BugFixして完成したものです。グリッド内のボタンをDrag&Dropで動かせるので、対応関係の設定などに利用すると便利そうです。
DraggableButton.h
DraggableGridWidget.h
DraggableGridWidget.cpp
mainwindow内のダイアログ起動コード
ChatGPTに聞いてみたところ、modelを切り替えながら処理する場合どうするか、だいぶ複雑にはなる。あまり見慣れないコードだけど、これで動くようになる。(家計簿で、口座間移動処理データを同時に2つ削除するときのslotの部分)
Qtで、最近ほとんど使ってなかったポインタや参照をC++で久しぶりに使うことになったが、ほとんど忘れていた。少し復習してみた。
家計簿、スケジューラ、日記は、これまで.Net使った自作アプリを使ってきたが、今後Linuxでも使えるようにするため、すべてQtで作り変えることにした。スケジューラと日記はほぼ完成する。日記は、SQlite保存なので、暗号化したテキストで保存することにした。.NETに比べると復号が入っても検索処理も圧倒的に早くなっている。(.NETだと遅すぎて暗号処理を諦めていたけれど、Qtはその点心配はないようだ。)
昨今は、C++に変わり、Rustあたりが速度を要求されるアプリに使われつつあるということだけれど、QtでC++も悪くないように思う。
CMakeList.txtに以下3行追加必要
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
target_link_libraries(QtDiary PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)
error: Your local changes to the following files would be overwritten by merge: CMakeLists.txt.user Please commit your changes or stash them before you merge. Aborting
この場合、git stash > git pull > git stash pop を試してみる
CMakeLists.txt.user は通常 IDE のユーザー固有設定ファイルなので、プロジェクトによってはバージョン管理に含めないこともあるとか(.gitignore に追加したほうがいい)