2013-05-03 5 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(); 
    } 
} 

Вот и все.