6

QTableWidgetsItems がいくつかある QTableWidget が 1 つあります。一部のアイテムはチェックボックスを使用しています。次のコードを使用してチェックボックスを追加しました。

QTableWidgetsItem->setCheckState(Qt::Checked);

このチェックボックスの状態が変化したときに、いくつかの関数を呼び出したいと思います。たとえば、信号を使用します。

これを達成する最も簡単な方法は何ですか?

4

1 に答える 1

5

これを行う最も簡単な方法は、QTableWidget を含むクラスのスロットで QTableWidget のシグナルをキャプチャすることです。QTableWidget::itemActivatedこれが最善の策のように思われるかもしれませんが、Qt::CheckStateが に等しいときにこれが放出されるかどうかは不明Qt::Checkedです。さらに、これが真実であったとしても、シグナルは、アプリケーションが実行する必要がある可能性のあるチェックを外してアイテムを処理する機能を提供しません。

だから、ここに私の提案された解決策があります。QTableWidget を含むクラスで定義されたスロットでQTableWidget::itemPressedおよびシグナルをキャプチャします。QTableWidget::itemClickeditemPressed はマウス ボタンが離される前に呼び出され、itemClicked はマウス ボタンが離された後に呼び出される必要があるため、その QTableWidgetItem の Qt::CheckState は、これら 2 つのシグナル放出の間にのみ設定する必要があります。したがって、QTableWidgetItem の checkState がいつ変更されたかを、メモリ オーバーヘッドを抑えて正確に判断できます。

これらのスロットがどのように見えるかの例を次に示します。

void tableItemPressed(QTableWidgetItem * item)
{
    // member variable used to keep track of the check state for a 
    // table widget item currently being pressed
    m_pressedItemState = item->checkState();
}

void tableItemClicked(QTableWidgetItem * item)
{
    // if check box has been clicked
    if (m_pressedItemState != item->checkState())
    {
        // perform check logic here
    }
}

信号/スロットは次のように接続されます。

connect(m_tableWidget,SIGNAL(itemPressed(QTableWidgetItem *)),this,SLOT(tableItemPressed(QTableWidgetItem *)));
connect(m_tableWidget,SIGNAL(itemClicked(QTableWidgetItem *)),this,SLOT(tableItemClicked(QTableWidgetItem *)));

テーブル ウィジェットに関連付けるはどこm_tableWidgetにありますか。QTableWidget *

于 2013-03-19T08:38:57.500 に答える