2013-05-03 33 views
1

我試圖在Ubuntu 13.04中爲亮度控制創建一個應用程序。這個想法是製作一個托盤圖標和滑塊,它會在按下圖標時出現。問題是托盤菜單隻包含一個空的項目。這裏是代碼塊,它的作品,但不正確(這表明只有當空菜單項按下滑塊):使QSlider在QSystemTrayIcon中工作

cntrl::cntrl(QWidget *parent): 
QWidget(parent) 
{ 
    value = 2500; 
    slider = new QSlider (Qt::Horizontal,this); 
    slider->setValue(2500); 
    slider -> setRange(0,maxBrightness); 
    slider -> setSingleStep(50); 
    slider->setPageStep(50); 
    tray = new QSystemTrayIcon (this); 
    menu = new QMenu (this); 
    act = new QWidgetAction (this); 
    act->setDefaultWidget(slider); 
    menu->addAction(act); 
    tray->setContextMenu(menu); 
    tray->setIcon(QIcon(":/brightness2.png")); 
    tray->show(); 
    connect (slider,SIGNAL(valueChanged(int)),this,SLOT(changeBrightness(int))); 
    connect(act,SIGNAL(triggered()),menu,SLOT(show())); //trying to make it work somehow 
} 

有什麼不對?

回答

1

你的問題很容易解決。首先,您不需要爲菜單項添加動作來觸發顯示/隱藏QSlider。您需要的只是爲整個托盤圖標添加觸發器和插槽。

connect(tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), 
    this, SLOT(trayIconClicked(QSystemTrayIcon::ActivationReason))); 

而不僅僅是添加插槽:

void VolumeQWindow::trayIconClicked(QSystemTrayIcon::ActivationReason reason) 
{ 
    if (reason == QSystemTrayIcon::Trigger) 
    { 
    show(); 
    } 
} 

就是這樣。