はじめに
この記事は Qt Advent Calendar 2024 19日目の記事です。
一昨日は @Ndgt さんによる 3DCG分野からの Qt/PySide 入門記 でした。
結構昔から Maya が Qt で作られていて、Qt を使ったプラグインで拡張できるのは知識としては知っていましたが、それ以外にも幅広く使われているんですね。
今日は、Qt Creator にちょっとしたパッチを送ったのでそれを記事にしました。
きっかけ
最近 Slint という Qt とは別の GUI フレームワークをよく使っているのですが、プロパティの設定画面でホイールをスクロールしていたらイライラしました。
そしてバグ報告をしようと思ったら、すでに報告されていました。
そこで開発者の1人が以下のようにコメントしていました。
Thanks for the bug report.
We should do the same as what the platform natively does.
I tried Qt and the wheel does change the combobox even within scroll area.
On windows, it seems that the wheel only change the content of the combobox > if it has focus.
それで、昔 Qt Creator で同じ問題にいらっとして修正したことを思い出しました。
QComboBox: not accept wheel events for changing values
その詳細を調べようと Qt Creator を起動したら、同じような別の問題を見つけてしまいました。
多分、昔は CMake 使ってなかったので、普段 Qt Creator で操作するところに QTabBar が無かったんじゃないかなと思います。
直してみました
私の上記の変更をとりあえず受け入れた上で、開発者の1人がもっといい感じにしてくれたので、その仕組みをここの QTabBar に対して適用するような簡単な変更をしました。
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 80b249620b9..013402b5923 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -227,6 +227,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
m_configurationStates = new QTabBar(this);
m_configurationStates->addTab(Tr::tr("Initial Configuration"));
m_configurationStates->addTab(Tr::tr("Current Configuration"));
+ setWheelScrollingWithoutFocusBlocked(m_configurationStates);
connect(m_configurationStates, &QTabBar::currentChanged, this, [this](int index) {
updateConfigurationStateIndex(index);
});
CMakePM: Disable wheel events for QTabBar というパッチにして、本体に送りました。
レビューがスムーズに済んで、取り込まれるといいなと思っています。
おわりに
普段自分がよく使うツールなので、ちょっとでも気になるところがあるとすぐ改善したくなります。世界中のそんな人たちのおかげで、Qt Creator ってすごく使いやすい開発環境なんじゃないかなと思っています。私のちょっとした改善のいくつかも、みんなの役に立っていたらいいなと思っています。
明日は @Ndgt さんがなにか書いてくれるようです。期待しましょう!