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() を呼び出すようにしただけですが、こんな感じでうまくいきます。