2013-05-03 8 views
1

저는 Ubuntu 13.04에서 밝기 제어를위한 응용 프로그램을 만들려고합니다. 아이디어는 트레이 아이콘과 아이콘을 누르면 나타나는 슬라이더를 만드는 것입니다. 문제는 용지함 메뉴에 빈 항목이 있다는 것입니다. 다음은 작동하지만 올바르지 않은 코드 블록입니다 (빈 메뉴 항목을 눌렀을 때만 슬라이더를 보여줍니다) :QSystemTrayIcon에서 QSlider가 작동하도록하십시오.

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(); 
    } 
} 

합니다.