ラベル qt の投稿を表示しています。 すべての投稿を表示
ラベル qt の投稿を表示しています。 すべての投稿を表示

2026年2月3日火曜日

(備忘録)sqliteでのデータのコピー

 GUIのsqlite3ブラウザでデータコピーする方法を忘れないようにメモしておこうと思います。

・B Browser for SQLiteを使う場合

1) コピー先を開く

2) コピー元を Attach(別名を付ける)

 「データベースに接続」(「開く」ではないので注意!)で →ソースの データベースを追加

  Alias(別名)に src と入力

※ この段階で「src」という別DBとして認識される

3) SQL 実行(INSERT のみ)

「SQL実行」タブで以下を実行

INSERT INTO shishutunyu1 (date, sishutu, shunyu, zandaka, himoku, biko)

SELECT date, sishutu, shunyu, zandaka, himoku, biko

FROM src.shishutunyu1

WHERE date BETWEEN '2025-01-01' AND '2026-02-03';

4)変更を書き込み

2025年12月15日月曜日

Qtで最下行へスクロールする方法について

 Qtでは、行数が多くなると最下行へのスクロールが難しい仕様?のようです。

 実際のWigetの行サイズとかもあり、すべてを反映して正確なスクロール量を割り出すのが難しいという問題もある?ちょうど、エクセルなどで印刷イメージと編集画面で微妙にずれたりするのと同じ困難さかもしれませんが。

 こういうときは、泥臭い方法で、実際に繰り返し試しながらスクロール量を割り出すしかないのかもしれません。その旨、ChatGPTに伝えたところ、以下のコードを作ってくれました。なんとか、うまくいきました。

void KakeiboTable::scrollDown(){
    QScrollBar* bar = view->verticalScrollBar();
    if (!bar) return;
    int lastMax = -1;
    QTimer* timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, [=]() mutable {
        int curMax = bar->maximum();
        bar->setValue(curMax);
        if (curMax == lastMax) {
            timer->stop();
            timer->deleteLater();
        }
        lastMax = curMax;
    });
    timer->start(0);
}

2025年11月25日火曜日

Qt 他のOSからのコードの取り込み

 Windowsで作成したコードをLinuxで使う手順:
最初、NewProject>プロジェクトのインポート>既存プロジェクトのインポート
だと思って操作した。しかし、コンパイラのバージョンが一致しないためかうまくいかない。
ChatGPTによるとコマンドラインだけでもできるようだ。
必要なものそろえるには
sudo apt update
sudo apt install qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools
sudo apt install cmake build-essential ninja-build gdb
cd ~/qtkjog
rm -rf build
mkdir build
cd build
cmake ..
make -j4
これで、IDEに頼らず実行ファイルが動作した。

IDEの設定も、プロジェクト>ビルドと実行の中のDesktop Qt6.10.1というのができていたので、そこのビルド設定>一般マネージャを/home/user/qtkjog/buildと変更
また、実行時の設定>実行ファイルのところを/home/user/qtkjog/build/kjogとして、作業ディレクトリは空欄にしてみた。すると、立ち上げることができた。

ところが、これが、ビルドを消すとうまくいかなので、この方法は不完全なよう。configureがエラーでうまくいかない。

いろいろ、試行錯誤をしながらも、結局、正しくは、
・CMakeLists.txt を開く
・/home/user/qtkjog/build等の名称自動でつくので 必要なものにチェック入れる
・右下にconfigure projectのボタンが出てくるので、これをクリックでOk
・あとは、実行ボタンでOk
じつは、シンプルな操作でした。(ChatGPTはcmakeのconfigureがどっかにあるはずだと教えてくれるのだけど、新しいIDEにはそれは見つけられず、結局このconfigure projectのボタンがそれに該当するものだったらしい。configure>makeの手順はいつの時代になっても変わらないようだ。)

Windowsでは動作したのに、Ubuntuでは動作しないものもあった。C++の派生クラスの扱いがOSで微妙に違いがあるらしく、そのためらしい。こういうものは、なかなかバグを発見しずらく、気づくまで時間がかかってしまった。

2025年11月23日日曜日

Qt6 Linuxへのデプロイ

 配布の前段階として、試しにフォームのみのテストコードをデプロイ試してみた。
sudo apt install ninja-build
sudo apt install qt6-base-dev qt6-base-dev-tools
sudo apt install  qt6-tools-dev-tools qt6-l10n-tools
何度か失敗したらrm -rf CMakeCache.txt CMakeFiles/
cd ~/デスクトップ/test           rm -rf build           mkdir build            cd build   でいったん削除
cmake -DCMAKE_PREFIX_PATH="/usr/lib/x86_64-linux-gnu/cmake/Qt6" -DCMAKE_BUILD_TYPE=Release ..  (..はひとつ上にCMakeLists.txtがあることを示している)
make -j8
情況としては
test/
 ├ build/  ←ここで上記コマンド
 │   ├ Makefile
 │   ├ CMakeFiles/
 │   └ myapp (実行ファイル) →これが、このPC環境でなら実行可能になった
 └ CMakeLists.txt   となる

2025年11月20日木曜日

Qt レイアウトについて

    auto *labelLayout = new QHBoxLayout;
    labelLayout->addWidget(new QLabel("削除(左列)"));
    labelLayout->addWidget(new QLabel("適用(右列)"));

    auto *container = new QWidget;
    auto *containerLayout = new QVBoxLayout(container);
    containerLayout->addLayout(labelLayout);
    containerLayout->addWidget(grid);

    scrollArea->setWidget(container);

container:大きいレイアウトの中に入れる対象、containerLayout:その container 内での並べ方の定義 と 考える。

2025年11月18日火曜日

Qt ComboBoxの更新時シグナルを一時的に無視

一時的にシグナルを無効化するには 
QString oldText = cb->currentText();  // 現在の文字を保存
cb->blockSignals(true);  // イベントを一時的に無効化
cb->clear();
cb->addItems(items);
cb->setCurrentText(oldText);  // 元の文字に戻す
cb->blockSignals(false);  // イベント再開

これは、いろんな場面で必要になってくる定石?
QString oldText = cb->currentText();
{
    QSignalBlocker blocker(cb);  // ブロック開始
    cb->clear();
    cb->addItems(items);
    cb->setCurrentText(oldText);
} // ブロック終了と同時に自動復帰
という方法もあるとのこと。

2025年11月17日月曜日

Qtでボタンをグリッド内でDrag&Dropするコード

 よく使いそうな機能なので、ChatGPTといろいろやりとりしながら、BugFixして完成したものです。グリッド内のボタンをDrag&Dropで動かせるので、対応関係の設定などに利用すると便利そうです。


DraggableButton.h

DraggableGridWidget.h

DraggableGridWidget.cpp

mainwindow内のダイアログ起動コード

2025年11月14日金曜日

Qtで、同時に2つのmodelを扱う例

 ChatGPTに聞いてみたところ、modelを切り替えながら処理する場合どうするか、だいぶ複雑にはなる。あまり見慣れないコードだけど、これで動くようになる。(家計簿で、口座間移動処理データを同時に2つ削除するときのslotの部分)


モデルを使って「いったん読み込んで処理してから反映」としたのは、複数行選択
元テーブルの情報を参照先テーブルの削除条件に使う、という 2つのモデルを絡めた処理 を安全に実装するための手法、ということのようです。

2025年11月10日月曜日

Qtでいろいろ作成

 家計簿、スケジューラ、日記は、これまで.Net使った自作アプリを使ってきたが、今後Linuxでも使えるようにするため、すべてQtで作り変えることにした。スケジューラと日記はほぼ完成する。日記は、SQlite保存なので、暗号化したテキストで保存することにした。.NETに比べると復号が入っても検索処理も圧倒的に早くなっている。(.NETだと遅すぎて暗号処理を諦めていたけれど、Qtはその点心配はないようだ。)

  昨今は、C++に変わり、Rustあたりが速度を要求されるアプリに使われつつあるということだけれど、QtでC++も悪くないように思う。

2025年11月9日日曜日

QtでSqliteつかいたいとき

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)

2025年11月8日土曜日

QtのWindowsでのデプロイ方法

 マルチプラットフォーム言語のため、デプロイ方法は少し手間がかかる。

mingwの形式でビルドした場合

Release ビルドの exe があるディレクトリに移動して、

cd C:\Users\****\kjog\build\Desktop_Qt_6_9_3_MinGW_64_bit-Release

windeployqt.exe のフルパスを指定して実行する必要がある。

"C:\Qt\6.9.3\mingw_64\bin\windeployqt.exe" kjog.exe

2025年10月26日日曜日

Qtで、UIデザイナでMainWIndowにWidgetを配置する

 C#とは、コントロール(Widget)の配置の仕方が違うので少しとまどいました。

別ウインドウに表示はしやすいのですが、メインウインドウ内に配置するには、レイアウトの指定が必要なようです。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    table = new KakeiboTable(); // 親は addWidget() で設定されるので不要
    ui->centralwidget->layout()->addWidget(table);
}

上記コードだけでは、エラーになります。centralwidgetにテーブルビューを配置したい場合は、cetnralwidgetをオブジェクトインスペクタで選択したら、メニュー>フォームエディタから、レイアウトの方法を指定する必要がありました。ここらへんは、Qt独特のところで慣れが必要なところかもしれません。

あとはmain.cppで
    MainWindow *w = new MainWindow();
    w->show(); 
とするだけで、Widgetが配置されたメインウインドウを表示できます。

2025年10月22日水曜日

Qtのクロスプラットフォームでの開発 覚書

 github経由で、winでもlinuxでもコードを開発できるようにするには

安全なクロスOS運用の基本手順
git fetch                # 最新のリモート状態を確認
git pull                 # ローカルブランチに統合(最新化)
# ↓ コード修正(Linux/Windowsどちらでも同じ)
できたらpush

🔹 注意点
改行コードや文字コードの吸収
Git: .gitattributes に * text=auto
Qt: Qt::endl / QTextStream を使う
pull前にfetchで確認

2025年10月20日月曜日

QtCreatorをLinux Mintにいれてみた ~Flatpakについての覚書~

Flatpakでインストールした場合、サンドボックス化されているため、ショートカットを自分で作成することになるようです。 

Flatpak ショートカット作成の基本フロー:

①flatpak listでApplication ID を確認  例: io.qt.QtCreator

②#!/bin/bash

flatpak run io.qt.QtCreator を作成し、実行権限不可

③デスクトップショートカット作成ならば .desktop ファイルの Exec= にスクリプトや flatpak run <アプリID> を指定

Exec=flatpak run io.qt.QtCreator

2014年11月22日土曜日

Qtを試してみる

Qt Creater3.1.2を チュートリアルを見ながら試してみた。
チュートリアルの通り、コーディングしてもエラーが発生する。
どうやら、dllは、手動で入れてやる必要があるようだ。
エラーメッセージにしたがって、Windows用のDllを入れてみたところ動作した。
Android,Linux,Macなど様々なOSで動かせるというのがいい。
.netと使い方が似ているところもある。イベントトリガーとイベントハンドラの関係を シグナルとスロットというらしい? それらの接続もしやすいようになっているし、随所に使いやすい工夫がされている。
ただ大変なのは、最新の情報がほとんど英語ということのようだ。