fix: 修复 Windows 托盘图标不显示问题
- 图标改为不透明深色背景 + 纯色圆形 + 白色符号,避免透明背景兼容性问题 - 图标尺寸从 22 增加到 32 - 添加托盘气泡通知提示用户 - 确保 updateTrayIcon 时检查图标可见性 - 配置 git credential.store 记住凭据 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
4836a82cad
commit
dc2f8e5c4f
@ -105,7 +105,7 @@ void MainWindow::setupStatusBar(SenseVoiceEngine* sttEngine) {
|
|||||||
|
|
||||||
void MainWindow::setupTrayIcon() {
|
void MainWindow::setupTrayIcon() {
|
||||||
if (!QSystemTrayIcon::isSystemTrayAvailable()) {
|
if (!QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||||
LOG_INFO(kTag, "系统托盘不可用,跳过");
|
LOG_INFO(kTag, "系统托盘不可用");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +136,16 @@ void MainWindow::setupTrayIcon() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
trayIcon_->show();
|
trayIcon_->show();
|
||||||
LOG_INFO(kTag, "系统托盘图标已创建");
|
|
||||||
|
// 发送通知气泡,让用户注意到托盘图标
|
||||||
|
trayIcon_->showMessage(
|
||||||
|
"Impress Voice Input",
|
||||||
|
"语音输入已就绪,CapsLock 快捷键已注册",
|
||||||
|
QSystemTrayIcon::Information,
|
||||||
|
3000
|
||||||
|
);
|
||||||
|
|
||||||
|
LOG_INFO(kTag, QString("系统托盘图标已创建 (可用: %1)").arg(QSystemTrayIcon::isSystemTrayAvailable()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::updateTrayIcon(const QString& status) {
|
void MainWindow::updateTrayIcon(const QString& status) {
|
||||||
@ -166,15 +175,27 @@ void MainWindow::updateTrayIcon(const QString& status) {
|
|||||||
symbol = "○";
|
symbol = "○";
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon icon = createTrayIcon(color, symbol);
|
QPixmap pm = createTrayIcon(color, symbol);
|
||||||
|
QIcon icon(pm);
|
||||||
|
if (icon.isNull()) {
|
||||||
|
LOG_ERROR(kTag, "托盘图标创建失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
trayIcon_->setIcon(icon);
|
trayIcon_->setIcon(icon);
|
||||||
trayIcon_->setToolTip(QString("Impress Voice Input - %1").arg(status));
|
trayIcon_->setToolTip(QString("Impress Voice Input - %1").arg(status));
|
||||||
|
|
||||||
|
// 确保托盘图标可见
|
||||||
|
if (!trayIcon_->isVisible()) {
|
||||||
|
trayIcon_->show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap MainWindow::createTrayIcon(const QColor& color, const QString& symbol) {
|
QPixmap MainWindow::createTrayIcon(const QColor& color, const QString& symbol) {
|
||||||
const int size = 22;
|
const int size = 32;
|
||||||
QPixmap pixmap(size, size);
|
QPixmap pixmap(size, size);
|
||||||
pixmap.fill(Qt::transparent);
|
// 使用不透明背景,Windows 托盘对透明图标支持有限
|
||||||
|
pixmap.fill(QColor(40, 40, 45));
|
||||||
|
|
||||||
QPainter painter(&pixmap);
|
QPainter painter(&pixmap);
|
||||||
painter.setRenderHint(QPainter::Antialiasing);
|
painter.setRenderHint(QPainter::Antialiasing);
|
||||||
@ -182,15 +203,30 @@ QPixmap MainWindow::createTrayIcon(const QColor& color, const QString& symbol) {
|
|||||||
// 外圆
|
// 外圆
|
||||||
painter.setBrush(color);
|
painter.setBrush(color);
|
||||||
painter.setPen(Qt::NoPen);
|
painter.setPen(Qt::NoPen);
|
||||||
painter.drawEllipse(1, 1, size - 2, size - 2);
|
int margin = 4;
|
||||||
|
painter.drawEllipse(margin, margin, size - 2 * margin, size - 2 * margin);
|
||||||
|
|
||||||
// 符号(实心圆点/空心环)
|
// 内部符号
|
||||||
painter.setPen(QColor("#ffffff"));
|
if (symbol == "●") {
|
||||||
QFont font = painter.font();
|
// 录音中:内部白色实心圆
|
||||||
font.setPixelSize(14);
|
painter.setBrush(QColor("#ffffff"));
|
||||||
font.setBold(true);
|
int innerSize = 8;
|
||||||
painter.setFont(font);
|
int offset = (size - innerSize) / 2;
|
||||||
painter.drawText(pixmap.rect(), Qt::AlignCenter, symbol);
|
painter.drawEllipse(offset, offset, innerSize, innerSize);
|
||||||
|
} else if (symbol == "◉") {
|
||||||
|
// 识别中:白色环形
|
||||||
|
painter.setPen(QPen(QColor("#ffffff"), 3));
|
||||||
|
painter.setBrush(Qt::NoBrush);
|
||||||
|
int innerSize = 12;
|
||||||
|
int offset = (size - innerSize) / 2;
|
||||||
|
painter.drawEllipse(offset, offset, innerSize, innerSize);
|
||||||
|
} else {
|
||||||
|
// 空心:小白点
|
||||||
|
painter.setBrush(QColor("#ffffff"));
|
||||||
|
int dotSize = 6;
|
||||||
|
int offset = (size - dotSize) / 2;
|
||||||
|
painter.drawEllipse(offset, offset, dotSize, dotSize);
|
||||||
|
}
|
||||||
|
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user