我设法使QSystemTrayIcon类似于以下内容:
使用以下代码行(信号插槽正常工作):
#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>
#include <form.h>
Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::Dialog)
{
ui->setupUi(this);
QIcon icon("/Users/JohnnyAppleseed/IMAGE.png");
m_ptrTrayIcon = new QSystemTrayIcon(icon );
m_ptrTrayIcon->setToolTip( tr( "Bubble Message" ) );
// m_ptrTrayIcon->setContextMenu(m_trayIconMenu);
connect(m_ptrTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
}
Dialog::~Dialog()
{
delete ui;
}
但是,当我尝试实现在我创建的QSystemTrayIcon附近显示QWidget/QWindow的代码时,它无法显示在它附近。使用以下代码,它也会显示并消失得很快(即使我不希望它靠近QSystemTrayIcon):
void Dialog::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
form fr;
fr.setWindowFlags(Qt::Popup);
fr.show();
}
为了清楚起见,我想显示我的QWidget/QWindow就像VMWare Fusion的方法(或 Microsoft Windows Vista或更高版本中的时钟... )
Mac OS X/Linux
微软Windows
有人可以指出我做错了什么吗?谢谢!
为了简化操作,请下载项目:http://zipshare.net/sv
更新#1
关于QWidget/QWindow轻弹问题, vahancho 建议我将
form fr;
从void Dialog::iconActivated(QSystemTrayIcon::ActivationReason reason)
函数移到工作窗口的标题。由于 vahancho ,它成功运行了。现在显示该窗口,但是它还没有靠近QSystemTrayIcon :( 最佳答案
问题是您在堆栈中创建了表单对象,并且一旦执行完iconActivated()插槽,它就会被删除。这就是为什么一旦您看到它就会消失。要解决该问题,您需要在堆中创建弹出窗口。
更新
为了将对话框放置在托盘图标附近,您必须确定托盘图标的位置。为此,您可以使用QSystemTrayIcon::geometry()函数。您的代码将如下所示(根据需要调整坐标):
QRect rect = m_ptrTrayIcon->geometry();
fr.move(rect.x(), rect.y());
fr.show();
关于c++ - 在QT C++中的QSystemTrayIcon附近显示QWidget或QWindow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30693068/