0

QT でタイムアウトを実装しようとしています。次のタスクを実行したいので、タイムアウトが必要です。アプリケーションでは、メニューを実装しました。メニューからオプションの選択を入力すると、関連する画面が実行されます。15 秒以内にキー イベントを取得しない場合、この画面は 15 秒後にタイムアウトするはずです。以下は私のコードです:

bool cMeasurementUnit::eventFilter(QObject *obj, QEvent *event)
{
    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
    if(event->type() == QEvent::KeyPress)
    {
        if((keyEvent ->key()) == Qt::Key_Tab)
        {
            if(m_pWidgetFirstTabFocus->hasFocus())
            {
                m_pWidgetFirstTabFocus->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 255);"));
            }
            m_pWidgetFirstTabFocus = m_pWidgetFirstTabFocus->nextInFocusChain() ;
            while((m_pWidgetFirstTabFocus->focusPolicy()) == Qt::NoFocus)
            {
                m_pWidgetFirstTabFocus = m_pWidgetFirstTabFocus->nextInFocusChain() ;
                if(m_pWidgetFirstTabFocus == this)
                {
                    m_pWidgetFirstTabFocus = MEASUREMENT_UNIT_FIRST_TAB;
                }
            }
            m_pWidgetFirstTabFocus->setStyleSheet(QString::fromUtf8("background-color: rgb(207, 207, 207);"));
        }
        else if((keyEvent ->key()) == Qt::Key_Return)
        {
            SaveChannelUnit();
            return true ;
        }
        else if((keyEvent ->key()) == Qt::Key_Up)
        {
            if (((QComboBox *)m_pWidgetFirstTabFocus)->currentIndex() == 0)
            {
                ((QComboBox *)m_pWidgetFirstTabFocus)->setCurrentIndex((((QComboBox *)m_pWidgetFirstTabFocus)->count() - 1)) ;
                return true ;
            }
        }
        else if((keyEvent ->key()) == Qt::Key_Left)
        {
            return true;
        }
    }
    return QObject::eventFilter(obj, event);
}

QTimer::singleShot(15000, this, SLOT(DeleteClass())); を使用して実装しようとしました。しかし、それは機能していません。この問題に関して私を助けてください。上記のコードの if(event->type() == QEvent::KeyPress) ステートメント内に QTimer::singleShot を実装したので、キーを押すたびに QTimer::singleShot と画面が再初期化されますクラスの cMeasurementUnit はタイムアウトになりません。それ以外の場合は、15 秒後にタイムアウトになります。以下は DeleteClass のコードですが、正しいですか? そうでない場合は、正しい方法を教えてください。前もって感謝します

void cMeasurementUnit::DeleteClass()
{
    DPRINTF("IN FUNCTION %s\n",__FUNCTION__);
    delete this;
}
4

1 に答える 1