【问题标题】:Getting QTableWidgetItem out of cellWidget()'s QCheckBox从 cellWidget() 的 QCheckBox 中获取 QTableWidgetItem
【发布时间】:2016-07-17 07:07:52
【问题描述】:

我将 QCheckBox 存储在 QTableWidget 中,方式如下:

QCheckBox *checkBox = new QCheckBox();
QWidget *widget = new QWidget();
QHBoxLayout *layout = new QHBoxLayout(widget);
layout->addWidget(checkBox);
layout->setAlignment(Qt::AlignCenter);
layout->setContentsMargins(0,0,0,0);
widget->setLayout(layout);
tableWidget->setCellWidget(row, 2, widget);

然后,我抓住stateChanged() 中的checkBox

connect( checkBox, SIGNAL(stateChanged(int)), this, SLOT(checkBoxStateChanged(int)) );
void MainWindow::checkBoxStateChanged(int)
{
    QCheckBox * box = qobject_cast< QCheckBox * >( sender() );
    if( !box ) {
        return;
    }
}

现在,我可以联系到QTableWidget——它是box-&gt;parent()-&gt;parent()-&gt;parent()。在此之前的对象,即box-&gt;parent()-&gt;parent(),是qt_scrollarea_viewport(即objectName())。我搜索了“视口”的子项,发现 16 QWidgets - 我表中的行数。但是,他们的孩子只有QHBoxLayoutQCheckBox。显然没有对QTableWidgetItem 的引用——看起来好像我在某个并行对象层次结构中,而QTableWidgetItem 在其他层次结构中。真的吗?如何获得物品?

【问题讨论】:

    标签: qt qtablewidget qtablewidgetitem qcheckbox


    【解决方案1】:

    看到这个问题:How to work with signals from QTableWidget cell with cellWidget set

    适应你的情况:

    void MainWindow::checkBoxStateChanged(int)
    {
        QCheckBox * box = qobject_cast< QCheckBox * >( sender() );
        if (box)
        {
            int row = box->property("row").toInt();
            int column = box->property("column").toInt();
            QTableWidgetItem* item = tableWidget->item(row, column);
        }
    }
    

    【讨论】:

    • 问题是我移动了表格的行。还必须在组合框对象上反映移动。
    猜你喜欢
    • 2013-08-27
    • 2012-05-28
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多