Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QSystemTrayIcon不';我不总是出现_C++_Linux_Qt_Xfce - Fatal编程技术网

C++ QSystemTrayIcon不';我不总是出现

C++ QSystemTrayIcon不';我不总是出现,c++,linux,qt,xfce,C++,Linux,Qt,Xfce,我已经编写了一个小程序来在合成器(xfwm4、dcompmgr、CAROO compmgr)之间切换,以帮助处理nVidia可能遇到的视频撕裂。它会在系统托盘中创建一个具有其操作的图标。问题是当我运行我的程序时,图标并不总是出现,在我切换到不同的合成器后,图标就会消失。我在这里可以看到的视频中捕捉到: 我正在使用: 带Xfce的64位Manjaro Linux QtCreator v.2.8.0和Qt 5.1 有人能帮我吗 compSwitcher.cpp #include "compswit

我已经编写了一个小程序来在合成器(xfwm4、dcompmgr、CAROO compmgr)之间切换,以帮助处理nVidia可能遇到的视频撕裂。它会在系统托盘中创建一个具有其操作的图标。问题是当我运行我的程序时,图标并不总是出现,在我切换到不同的合成器后,图标就会消失。我在这里可以看到的视频中捕捉到:

我正在使用: 带Xfce的64位Manjaro Linux
QtCreator v.2.8.0和Qt 5.1

有人能帮我吗

compSwitcher.cpp

#include "compswitcher.h"
#include "ui_compswitcher.h"
#include <QMenu>
#include <QCloseEvent>
#include <QDebug>

compSwitcher::compSwitcher(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::compSwitcher)
{
    ui->setupUi(this);

    createActions();
    createIcon();
    setIcon();
    qDebug() << "Before trayIcon->show()\n";
    trayIcon->show();
    qDebug() << "After trayIcon->show()";

}

compSwitcher::~compSwitcher()
{
    delete ui;
    delete trayIcon;
    delete menu;
    delete xfwm4;
    delete close;
    delete dcompmgr;
}

void compSwitcher::createActions()
{
    close = new QAction(tr("&Quit"),this);
    QObject::connect(close, SIGNAL(triggered()), this, SLOT(endProgram()));

    xfwm4 = new QAction(tr("&xfwm4"), this);
    connect(xfwm4, SIGNAL(triggered()), this, SLOT(setXfwm4()));

    dcompmgr = new QAction(tr("&dcompmgr"), this);
    connect(dcompmgr, SIGNAL(triggered()), this, SLOT(setDcompmgr()));

    cairo = new QAction(tr("&cairo-compmgr"), this);
    connect(cairo,SIGNAL(triggered()), this, SLOT(setCairo()));
}

void compSwitcher::createIcon()
{
    menu = new QMenu(this);
    menu->addAction(xfwm4);
    menu->addAction(dcompmgr);
    menu->addAction(cairo);
    menu->addSeparator();
    menu->addAction(close);

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setContextMenu(menu);

}

void compSwitcher::setIcon()
{
    QIcon ikona(":/new/prefix1/kuba_fan1.png");
    trayIcon->setIcon(QIcon(ikona));

}

void compSwitcher::setXfwm4()
{
    system("/home/dec/Programowanie/qt/compSwitcher/skrypty/xfwm4true.sh");
}

void compSwitcher::setDcompmgr()
{
    system("/home/dec/Programowanie/qt/compSwitcher/skrypty/dcompmgr.sh");
}

void compSwitcher::setCairo()
{
    system("/home/dec/Programowanie/qt/compSwitcher/skrypty/cairo.sh");

}
#包括“compswitcher.h”
#包括“ui_compswitcher.h”
#包括
#包括
#包括
compSwitcher::compSwitcher(QWidget*父项):
QWidget(母公司),
ui(新ui::compSwitcher)
{
用户界面->设置用户界面(此);
createActions();
createIcon();
setIcon();
qDebug()show();
qDebug()addAction(xfwm4);
菜单->添加操作(dcompmgr);
菜单->添加操作(开罗);
菜单->添加分隔符();
菜单->添加操作(关闭);
trayIcon=新QSystemTrayIcon(本);
trayIcon->setContextMenu(菜单);
}
void compSwitcher::setIcon()
{
QIcon ikona(:/new/prefix1/kuba_fan1.png);
trayIcon->setIcon(QIcon(ikona));
}
void compSwitcher::setXfwm4()
{
系统(“/home/dec/Programowanie/qt/compSwitcher/skrypty/xfwm4true.sh”);
}
void compSwitcher::setDcompmgr()
{
系统(“/home/dec/Programowanie/qt/compSwitcher/skrypty/dcompmgr.sh”);
}
void compSwitcher::setCairo()
{
系统(“/home/dec/Programowanie/qt/compSwitcher/skrypty/cairo.sh”);
}

我遇到了类似的问题,在我的情况下,托盘从未显示

我还有:带Xfce的64位Manjaro Linux

我通过将面板改为tint2解决了这个问题。我认为这是xfce面板的问题