Qt でマスコット系のアプリを作っていると、タスクバーにアプリ名が表示されるのを抑制したいことがあります。(抑制すると Alt-Tab を押したときにも表示されなくなる) そういう場合、単に
#if defined(Q_OS_WIN) WId wid = winId(); LONG style = GetWindowLong(wid, GWL_EXSTYLE); SetWindowLong(wid, GWL_EXSTYLE, style | WS_EX_TOOLWINDOW); #endif
を追記してもよいのですが QWidget::setWindowFlags() が SetWindowLong() を呼び出しているせいか、設定がうまく反映されなかったりしました。
仕方がないので、タスクバーへのアプリ名表示を抑制する Widget クラスに(例えば Balloon_widget) の setWindowFlags() をオーバーライドして、以下のようにしました。
void Balloon_widget::setWindowFlags(Qt::WindowFlags flags) { QWidget::setWindowFlags(flags); #if defined(Q_OS_WIN) WId wid = winId(); LONG style = GetWindowLong(wid, GWL_EXSTYLE); SetWindowLong(wid, GWL_EXSTYLE, style | WS_EX_TOOLWINDOW); #endif }
親クラスのメソッドを呼び出してから、setWindowLong() を呼び出すようにしただけですが、こんな感じでうまくいきます。