0

1つ以上のQTableView子ウィジェットを含むことができるウィジェットがあります。デフォルトでは、QTableViewの1つで範囲を選択し、crtl + cを押すと、左上のセルのみがクリップボードにコピーされます。範囲全体をコピーしたいので、その仕事をするcopy()スロットを実装しました。コピースロットに、コンテキストメニュー(ユーザーが選択を行い、対応するQTableViewを右クリックしたとき)とctrl+cショートカットの両方からアクセスできるようにしたいと思います。

class Widget
{
    Q_OBJECT
public:
    void setupContextMenu();

private:

    QMenu* contextMenu_;
    QAction* copyAction_;
    QTableView* tableView_;

private slots:
    void copy();
}

void Widget::setupContextMenu()
{
    contextMenu_ = new QMenu(this);
    copyAction_ = contextMenu_->addAction("&Copy");
    copyAction_->setShortcut(QKeySequence::Copy);
    connect(copyAction_, SIGNAL(triggered()),
            this, SLOT(copy()));
}

範囲を選択して右クリックすると、適切なコンテキストメニューがポップアップ表示され、ショートカットの名前も含まれます。コンテキストメニューの[コピー]アクションをクリックすると、copy()スロットが実行されます。ただし、ctrl + cショートカットは、以前と同様に、選択範囲の左上のセルのみをコピーします。また、copy()スロットは実行されません。

どうすればこれを修復できますか?

4

1 に答える 1

3

よくわかりませんが、ショートカットキーがQtのコンテキストメニューで機能しない可能性がありますか?

コピーショートカットの処理はで行われQAbstractItemView::keyPressEvent()ます。イベントを監視しているQTableViewにイベントフィルターをインストールし、そこでコピーを処理できKeyPressます。

于 2012-08-07T04:34:10.830 に答える