4

Qtでプロジェクトを開発しています。QTreeWidget(filesTreeWidget) にいくつかのファイル名とファイルを作成するためのボタンがあります。[作成] ボタンは、filesTreeWidget に、名前を選択するために編集される新しいアイテム (アイテムのテキストは "") を追加します。Enter キーを押すと、ファイル名がソケット経由でサーバーに送信されます。ファイル名が「」のままでサーバーに送信されないため、ESCを押すと問題が発生します。keyPressEvent を上書きしようとしましたが、機能しません。何か案は?アイテムを編集しているときに、ESC プレス イベントをキャッチする必要があります。

4

2 に答える 2

8

QTreeWidget をサブクラス化し、次のQTreeView::keyPressEventように再実装できます。

void MyTreeWidget::keyPressEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_Escape)
    {
        // handle the key press, perhaps giving the item text a default value
        event->accept();
    }
    else
    {
        QTreeView::keyPressEvent(event); // call the default implementation
    }
}

あなたが望むものを達成するためのよりエレガントな方法があるかもしれませんが、これはかなり簡単なはずです. たとえば、本当にサブクラス化したくない場合は、イベント フィルターをインストールできますが、比較的コストがかかるため、多くのイベントを含む「大きな」クラスでは特にそうするのは好きではありません。

于 2013-01-26T15:43:45.097 に答える
4

keyPressEvent次のように関数を実装します。

void TestTreeWidget::keyPressEvent(QKeyEvent *event)
{
    switch (event->key())
    {
        case Qt::Key_Escape:
        {
            escapeKeyPressEventHandler(); 
            event->accept();
            break;
        }
        default:
            QTreeWidget::keyPressEvent(event);
    }
}

TestTreeWidget::escapeKeyPressEventHandler()
{
     // work with your QTreeWidgetItem here
}
于 2013-01-26T19:11:44.527 に答える