我有一个带有复选框的WidgetList
,我想将其用作调用slotTest
函数的信号。
不幸的是,代码不起作用,我找不到解决方案:
connect(ui->listWidget, SIGNAL(item->checkState()), this, SLOT(slotTest()), Qt::QueuedConnection);
这里更多代码:
QStringList list;
list << "CH1 100kHz" << "CH2 100kHz" << "CH3 100kHz";
model->setStringList(list);
ui->listView->setModel(model);
ui->listView->setEditTriggers(QAbstractItemView::AnyKeyPressed | QAbstractItemView::DoubleClicked);
//ui->listView->setSelectionMode(QAbstractItemView::S)
ui->listWidget->addItems(list);
QListWidgetItem* item = 0;
for(int i = 0; i < ui->listWidget->count(); ++i){
item = ui->listWidget->item(i);
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setFlags(item->flags() | Qt::ItemIsEditable);
item->setCheckState(Qt::Unchecked);
//connect(ui->listWidget, SIGNAL(itemClicked()), this, SLOT(slotTest()), Qt::QueuedConnection);
// bool ischeck=ui->listWidget->item(i)->checkState();
connect(ui->listWidget, SIGNAL(item->checkState()), this, SLOT(slotTest()), Qt::QueuedConnection);
}
最佳答案
首先, checkState()
不是信号,因此您无法连接到它。
此外, connect()
调用的第一个参数应该是信号的实际发送方,而不是其父级。
一种选择是当用户与控件交互时,连接到 QListWidget
发出的信号之一。您应该对其进行测试,以确定最适合您的用例的一个。
例如:
QObject::connect(ui->listWidget, &QListWidget::itemChanged, this, &MainWindow::slotTest);
void MainWindow::slotTest(QListWidgetItem *item)
{
qInfo() << item->checkState();
}
关于c++ - QT,C++:Signal和Slots如何与listWidgetItems一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57849686/