Jak*_*les 16 c++ qt window-managers
如何在Qt中正确实现"最小化托盘"功能?
我在里面尝试了以下代码QMainWindow::changeEvent(QEvent *e)
,但是窗口只是最小化到任务栏,并且客户端区域在恢复时显示为空白.
if (Preferences::instance().minimizeToTray())
{
e->ignore();
this->setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)
试图忽略该事件似乎也没有做任何事情.
Jak*_*les 17
显然,处理其他事件需要很小的延迟(也许有人会发布确切的细节?).这就是我最终做的事情,它完美地运作:
void MainWindow::changeEvent(QEvent* e)
{
switch (e->type())
{
case QEvent::LanguageChange:
this->ui->retranslateUi(this);
break;
case QEvent::WindowStateChange:
{
if (this->windowState() & Qt::WindowMinimized)
{
if (Preferences::instance().minimizeToTray())
{
QTimer::singleShot(250, this, SLOT(hide()));
}
}
break;
}
default:
break;
}
QMainWindow::changeEvent(e);
}
Run Code Online (Sandbox Code Playgroud)
Man*_*bes 11
除了Jake Petroules所说的,它似乎只是做:
QTimer::singleShot(0, this, SLOT(hide()));
Run Code Online (Sandbox Code Playgroud)
足够.来自http://qt-project.org/doc/qt-4.8/qtimer.html#details:
作为一种特殊情况,只要处理了窗口系统事件队列中的所有事件,
QTimer
超时0
将超时.
这样你就没有选择合适的延迟值的问题了......
void main_window::create_tray_icon()
{
m_tray_icon = new QSystemTrayIcon(QIcon(":/icon.png"), this);
connect( m_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_show_hide(QSystemTrayIcon::ActivationReason)) );
QAction *quit_action = new QAction( "Exit", m_tray_icon );
connect( quit_action, SIGNAL(triggered()), this, SLOT(on_exit()) );
QAction *hide_action = new QAction( "Show/Hide", m_tray_icon );
connect( hide_action, SIGNAL(triggered()), this, SLOT(on_show_hide()) );
QMenu *tray_icon_menu = new QMenu;
tray_icon_menu->addAction( hide_action );
tray_icon_menu->addAction( quit_action );
m_tray_icon->setContextMenu( tray_icon_menu );
m_tray_icon->show();
}
void main_window::on_show_hide( QSystemTrayIcon::ActivationReason reason )
{
if( reason )
{
if( reason != QSystemTrayIcon::DoubleClick )
return;
}
if( isVisible() )
{
hide();
}
else
{
show();
raise();
setFocus();
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何实现"最小化托盘".您现在可以通过双击图标或右键单击并在菜单中选择"显示/隐藏"来最小化.
归档时间: |
|
查看次数: |
10007 次 |
最近记录: |