0

おそらく私が求めていることは非常に簡単ですが、私は立ち往生しています!:(

私は私がいくつかの'esを追加するaをQWidgetロードするaを持っていますQGridLayoutQCheckBox

チェックボックスから状態変化信号をキャッチする方法がわからないようです。

チェックボックスはforループに追加されます。このループでは、新しいQCheckBoxを作成し、それをウィジェットとしてqgridlayoutに追加します。

何を接続するのですか?カスタムスロットへの各ボタンの状態変更信号、または他の何か?

私が使用するコードは

QGridLayout *myLayout = new QGridLayout;
for (int i=0; i<(int)m_List.size(); i++)
{
    QCheckBox *button = new QCheckBox;
    button->setText(m_List[i].m_strName.c_str());
    button->setIcon(QIcon(m_List[i].m_strThumbNailPath.c_str()));
    button->setIconSize(QSize(50, 50));
    button->setCheckable(true);
    myLayout->addWidget(button);
    connect(button, SIGNAL(stateChanged), this, SLOT(checkboxStateChanged));
}


myLayout->setRowStretch(2, 10);
myLayout->setColumnStretch(2, 10);

QWidget *myWidget = new QWidget;
myWidget->setLayout(myLayout);

myToolbox = new QToolBox;
myToolbox->addItem(myWidget, "Options");

チェックボックスが正しく表示され、チェックボックスをオンまたはオフにすることはできますが、信号をキャッチできません...何が欠けていますか?ありがとう!

4

2 に答える 2

3

接続に問題があります (署名なし):

connect(button, SIGNAL(stateChanged), this, SLOT(checkboxStateChanged)); 

パラメータを次の場所に追加します:stateChangedおよびcheckboxStateChanged

次のようにする必要があります。

connect(button, SIGNAL(stateChanged(int)), this, SLOT(checkboxStateChanged(int))); 

checkboxStateChangedint パラメーターのチェックボックスの状態を次のいずれかとして取得します。

Qt::CheckState

列挙値については、こちらを参照してください

于 2011-04-27T12:44:18.100 に答える
2

はい、soulSurfer が提供した答えはおそらく接続を修正するでしょうが、あなたの問題ではありません。どのボタンがクリックされたかをどのように理解しますか (重要だと思います)。

どのボタンがクリックされたかを理解するには、QSignalMapperまたはQButtonGroup を使用する必要があります。

お役に立てれば。

于 2011-04-27T12:57:07.500 に答える