QT,C++:信号和插槽如何与listWidgetItems配合使用?

QT, C++: How do Signal and Slots works with listWidgetItems?

本文关键字:listWidgetItems C++ 信号 插槽 QT      更新时间:2023-10-16

我有一个带有复选框的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();
}