Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Убрать приложение из taskBar при minimize


Автор: borisbn 6.5.2010, 08:34
Доброго времени суток!
Имеется Widget, который должен "сворачиваться" в systemTray. При нажатии на кнопку закрытия окна (красный крест) окно исчезает с экрана и из taskBar'а, но остаётся иконка в sysTray'е (как и должно быть), а при нажатии кнопки minimize окно закрывается, но в taskBar'е остаётся значок приложения. Подскажите, пожалуйста, как убрать приложение из taskBar при minimize ?
Qt 4.6.2, MSVC 2008, Windows-7
file_remover.h
Код

...
class FileRemover : public QWidget
{
    Q_OBJECT

...

protected:
    void closeEvent( QCloseEvent * event );
    void hideEvent( QHideEvent * event );

    QSystemTrayIcon * m_trayIcon;
};

file_remover.cpp
Код

FileRemover::FileRemover( QWidget * parent, Qt::WFlags flags )
    : QWidget( parent, flags )
{
...
    createTrayIconMenu();

    m_trayIcon = new QSystemTrayIcon( this );
    m_trayIcon->setContextMenu( trayIconMenu );
    m_trayIcon->show();
}

void FileRemover::closeEvent( QCloseEvent * event )
{
    if ( m_trayIcon->isVisible() )
    {
        hide();
        event->ignore();
    }
}

void FileRemover::hideEvent( QHideEvent * event )
{
    close(); // не работает
//    m_trayIcon->hide(); // не работает
//    setVisible( false ); // не работает
    event->accept();
}

main.cpp
Код

int main( int argc, char *argv[] )
{
    QApplication a( argc, argv );
    QApplication::setQuitOnLastWindowClosed( false );
    FileRemover w;
    return a.exec();
}


Автор: chaos 11.5.2010, 14:09
http://doc.qt.nokia.com/4.6/qwidget.html#hide

Автор: borisbn 11.5.2010, 15:37
chaos, hide не работает. Форма с экрана уходит, а из taskBar'а - нет. При нажатии на иконку приложения в taskBar'е окно открывается, но на нём нет ни одного контрола (только окно и заголовок). В общем-то, я вышел из ситуации (подсказали на QtCentre), но мне этот костыль не очень нравится: 
Код

void FileRemover::hideEvent( QHideEvent * event )
{
    QTimer::singleShot( 250, this, SLOT( close() ) );
    event->ignore();
}

Если close вызывать явно, то происходит то же, что и с hide.
Интересно, это глюк/фича windows или Qt ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)