[英]Show QWidget or QWindow near QSystemTrayIcon in QT C++
我设法让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()插槽就会被删除。 这就是为什么它一看到它就会消失的原因。 要解决此问题,您需要在堆中创建弹出窗口。
UPDATE
为了将对话框放在托盘图标附近,您必须确定托盘图标位置。 为此,您可以使用QSystemTrayIcon :: geometry()函数。 您的代码看起来像(根据您的需要调整坐标):
QRect rect = m_ptrTrayIcon->geometry();
fr.move(rect.x(), rect.y());
fr.show();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.