我建立一套QCheckBox的動態基於像這樣一些用戶輸入:引發一個信號當QCheckBox被經過
QWidget *wid = new QWidget();
QVBoxLayout *layout = new QVBoxLayout();
for(int i=0; i<NumberModes; i++)
{
int k = Amplitudes(i,0);
int m = Amplitudes(i,1);
QString ks = QString::number(k);
QString ms = QString::number(m);
QString position = QString::number(i);
QString mode = "A"+ks+ms;
QCheckBox *check = new QCheckBox(mode);
connect(check, SIGNAL(toggled(bool)), &mapper, SLOT(map()));
connect(check, SIGNAL(toggled(bool)), &SelectModes, SLOT(map()));
mapper.setMapping(check,position);
SelectModes.setMapping(check,mode);
layout->addWidget(check);
updateGeometry();
}
wid->setLayout(layout);
ui->scrollArea->setWidget(wid);
的QSignalMapper然後連接到另一個類執行一些計算:
connect(&SelectModes, SIGNAL(mapped(QString)), this, SIGNAL(CheckBoxClicked2(QString)));
connect(this, SIGNAL(CheckBoxClicked2(QString)), &Supress2, SLOT(ListenSelectedModes(QString)));
connect(&mapper, SIGNAL(mapped(QString)), this, SIGNAL(CheckBoxClicked(QString)));
connect(this, SIGNAL(CheckBoxClicked(QString)), &Suppress, SLOT(ListenSelectedModes(QString)));
我需要的是這些類只在QCheckBox被選中時纔會接收信號;這意味着如果您檢查一次,然後取消檢查它不應發出或接收信號。不知道最好的方法是什麼。 任何想法?
你能澄清哪個事件應該發出信號?當checckboxes被選中時,而不是當他們沒有被選中時?一種方法應該是對複選框進行子類化。添加一個專用插槽,發出用戶定義的信號,該信號僅在適當的時候被命名。 – user2672165
對,只有在檢查時纔會發出信號。所以如果我有3個QcheckBox:C1,C2和C3;並且用戶檢查C1和C2,但是然後取消選中C2,只發出C1的信號。不知道我是否有任何意義:) – user1981855
然後只有我知道(QSignalMapper不是很熟悉)的方法是,每當它們中的任何一個改變狀態時都會通過所有複選框。然後你可以在子類複選框中有一個公共的功能,如果你選中的話,你可以發出它。你也可以給自己的對象添加一個信號,它可以發出一個只包含選中對象的列表。 – user2672165