【问题标题】:How to run FlashWindow in Linux?如何在 Linux 中运行 FlashWindow?
【发布时间】:2018-10-03 02:24:30
【问题描述】:

当该过程完成时,我需要在任务栏中突出显示一个窗口。

我在 Windows 中调用 ::FlashWindow((HWND)winId(), false);
我怎样才能在 Linux 中做同样的事情?

QApplication::alert(this); 不适合我。
KDE 桌面 5。


此代码对我不起作用。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(released()), this, SLOT(test()));
}

void MainWindow::test()
{
    QThread::msleep(5000);
    QApplication::alert(this);
}

但这一个有效。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QTimer *timer = new QTimer();

    QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timer_alert()));
    timer->start(5000);
}

void MainWindow::timer_alert() {
    QApplication::alert(this);
}

有什么区别?

【问题讨论】:

  • Unity 启动器入口 API 适用于许多桌面 - 但并非适用于所有桌面。可以试试:wiki.ubuntu.com/Unity/LauncherAPI(不用库,用dbus接口即可)

标签: c++ linux qt user-interface


【解决方案1】:

没有通用的方法来实现这一点,因为它取决于桌面环境

可能根本没有“任务栏”(或面板)。过去,浏览器制造商也有类似的问题,试图支持 window.getAttention() 方法。

即使标题栏闪烁也可能不是那么容易,因为 Qt 无法控制窗口装饰(边框和标题),因此您可能需要使用 Xlib 手动实现。

如果您想在所有目标平台上获得相同的效果,您可以考虑实现一个简单的“闪烁”效果(例如播放窗口opacity)。请注意,只有在您运行合成器时,X11 才支持窗口不透明度。

【讨论】:

    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2022-10-19
    • 2012-06-14
    • 2021-03-11
    • 2021-09-17
    相关资源
    最近更新 更多