ignal和Slots如何与listWidgetItems一起使

ignal和Slots如何与listWidgetItems一起使

我有一个带有复选框的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/

10-13 05:37