【问题标题】:Qt How to check state checkbox in QtableWidgetQt如何检查QtableWidget中的状态复选框
【发布时间】:2013-11-30 06:04:15
【问题描述】:

最近我发现复选框放置在 QtableWidget 项目中间的方式。 但是,我不知道如何检查按钮是否被点击的状态。 你能告诉我如何检查按钮状态吗?

这是我找到的代码:

QWidget *pWidget = new QWidget();
QCheckBox *pCheckBox = new QCheckBox();
QHBoxLayout *pLayout = new QHBoxLayout(pWidget);
pCheckBox->setCheckState(Qt::Checked);
pLayout->addWidget(pCheckBox);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0,0,0,0);
pWidget->setLayout(pLayout);
ui->tableWidget2->setCellWidget(2,2, pWidget);

【问题讨论】:

  • 这方面有什么进展吗?

标签: qt qtablewidget qtablewidgetitem qcheckbox


【解决方案1】:

虽然已经很晚了,但你可以这样解决:

auto field = ui->tableWidget2->cellWidget(2, 2, pWidget);

std::cout << qobject_cast<QCheckBox*>(field)->isChecked() << std::endl;

这也适用于其他类型(QComboBox 等)。虽然使用QTableWidgetItem 已经拥有的复选框功能可能会更好。

如果您使用三态复选框,则此示例可能不起作用,在这种情况下您应该调用:checkState() 并将其与 Qt::CheckState 进行比较。如果qobject_cast&lt;T&gt; 不起作用,您可以使用reinterpret_cast&lt;T&gt;

【讨论】:

    【解决方案2】:

    我假设您在 QWidgetTable 中创建了您的复选框,如下所示:

    int row...;int column...;
    ...
    QTableWidgetItem *checkBoxItem = new QTableWidgetItem();
    checkBoxItem->setCheckState(Qt::Unchecked);
    ui->Table->setItem(row, column, checkBoxItem);
    

    您可以在另一个函数中检查与您的小部件相对应的项目的状态,如下所示:

    void MainWindow::on_Table_cellClicked(int row, int column)
    {
        QTableWidgetItem *checkBoxState = ui->Table->item(row, column);
    
        if(ui->Table->item(row,column)->checkState())
        {
            checkBoxState->setCheckState(Qt::Unchecked);
            ui->Table->setItem(row, column, checkBoxState);
        }
        else
        {
            checkBoxState->setCheckState(Qt::Checked);
            ui->Table->setItem(row, column, checkBoxState);
        }
    }
    

    【讨论】:

    • 等等,你为什么要创建一个新的QTableWIdgetItem
    • QTableWidgetItem *checkBoxState = new QTableWidgetItem();更改为QTableWidgetItem *checkBoxState = ui-&gt;Table-&gt;item(row, column);
    • 你能告诉我们如何检查其复选框或文本字段等的单元格类型
    • 我想你没有意识到这个问题的特殊点,特殊点是使用setCellWidget设置项目而不是使用ui-&gt;Table-&gt;setItem设置项目,我没有测试它,但我猜这样ui-&gt;Table-&gt;item(row, column) 会返回一些你没想到的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多