-1

を継承してスタートメニューを作成しましたQMenuQPropertyAnimationスライド式で表示・非表示をしたい

問題:
表示と非表示を明示的に呼び出すと (スタート ボタンをクリックして)、表示と非表示が正常に機能します。しかし、スタートメニューの外側をクリックすると、すぐに非表示になります。この背後にある原因を教えてください:

My class is StartMenuUiClass which inherited from QMenu
mptrobj_animation is QPropertyAnimation object

void StartMenuUiClass::show()
{
    this->raise();
    disconnect(mptrobj_animation,SIGNAL(finished()),this,SLOT(this_hide()));
    QMenu::show();
    mptrobj_animation->setDuration(500);
    mptrobj_animation->setStartValue(*mptrobj_startPosition);
    mptrobj_animation->setEndValue(*mptrobj_endPosition);
    mptrobj_animation->start();
}

void StartMenuUiClass::hide()
{
    mptrobj_animation->setDuration(450);
    mptrobj_animation->setStartValue(*mptrobj_endPosition);
    mptrobj_animation->setEndValue(*mptrobj_startPosition);
    connect(mptrobj_animation,SIGNAL(finished()),this,SLOT(this_hide()));
    mptrobj_animation->start();
}

void StartMenuUiClass::this_hide()
{
    this->lower();
    emit work_Done();
    QMenu::hide();
}
4

1 に答える 1

1

メニュー ウィジェットの外側をクリックすると、関数を使用せずに非表示または閉じるだけだと思いStartMenuUiClass::hide()ます。QMenu::hideEvent(QHideEvent *event)and/orの処理を​​試みることができますQWidget::closeEvent(QCloseEvent *event)。このようなもの:

StartMenuUiClass::closeEvent(QCloseEvent *event) // the same for hideEvent()
{
    this->hide();
    event->accept();
}
于 2013-10-21T13:05:26.613 に答える