0

QTablewidget 内に埋め込まれたコンテキスト メニューを介して関数を呼び出そうとしています。スロットで関数を呼び出しません。私は何かが欠けている可能性がありますか?コンテキスト メニューは表示されますが、クリックしても何も起こりません。

    QMenu *contextMenu = new QMenu;
    QModelIndex cell = ui->tableWidget->indexAt(pos);

    if(cell.isValid())

    {
            contextMenu->addAction("Burn Case", this, SLOT(burnCase()));

            contextMenu->addAction("Export Case", this, SLOT(exportCase(cell.row())));

            contextMenu->addAction("Delete Case", this, SLOT(deleteCase(cell.row())));

            contextMenu->exec(ui->tableWidget->mapToGlobal(pos));
    }

アップデート:

パラメータが渡されていないスロットは機能しているように見えますが、パラメータのあるスロットは機能していません

4

1 に答える 1

2

SLOT(exportCase(cell.row())))は有効なconnect引数ではありません。マクロで渡される文字列にSLOT()は、スロットの名前とその引数の型が含まれている必要があります。引数値を直接渡すことはできません。したがって、スロットintが引数を受け入れる場合、ステートメントはSLOT(exportCase(int)).

それ以上に、引数が一致しないスロットに信号を接続することはできません。QMenu::addActionスロットをQAction::triggered(bool)信号に接続します。したがって、引数のないスロット、または引数が 1 つのスロットのみを使用できboolます。

connectの戻り値を使用して、実行時の問題を検出できますconnect()。何か問題が発生している場合は、確認することをお勧めします。また、Qt Creator のオートコンプリートは、マクロの使用SIGNAL()SLOT()役立ちます。

connect のドキュメントも参照してください。

于 2013-06-21T19:30:12.033 に答える