8

アプリケーションにQTableWidgetウィジェットがあります。アプリケーションで、シングルクリックとダブルクリックの両方のマウス イベントを個別に処理する必要があります。現在、セルをダブルクリックしても、シングルクリックスロットのみが呼び出されています。それらを個別に処理するにはどうすればよいですか?

以下は、シグナルスロット接続のコードです。

connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(myCellClicked(int, int)));
connect(ui.tableWidget, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(tableItemClicked(QTableWidgetItem*)));

ここに他の構成がありませんか?

4

1 に答える 1

9

わかりました。私は数週間前に同様の問題を抱えていました。問題は QTableWidgetItem にあります。どのように機能するのか正確にはわかりませんが、アイテムを見逃してセルをクリックすることがあります。それがあなたがそれを修正する方法です。次のように接続します。

connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(myCellClicked(int, int)));
connect(ui.tableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(tableItemClicked(int,int)));

そして、あなたの tableItemClicked スロットで次のようにします:

void MyWidget::tableItemClicked(int row, int column)
{
    QTableWidgetItem *item = new QTableWidgetItem;
    item = myTable->item(row,column)
    /* do some stuff with item */
}
于 2012-07-16T11:59:42.960 に答える