itemChanged シグナルで QTableWidget に新しい行を作成しようとしています。コードは次のとおりです。
Constructor::
{
ui->tblRoles->insertRow(0);
QTableWidgetItem *twl = new QTableWidgetItem("New Role");
QFont f = twl->font();
f.setItalic(true);
twl->setFont(f);
twl->setForeground(Qt::gray);
ui->tblRoles->setItem(0, 0, twl);
QObject::connect(ui->tblRoles, SIGNAL(itemChanged(QTableWidgetItem*)),
this, SLOT(newRole(QTableWidgetItem*)));
}
上記は、テーブルの最初の行を作成し、信号をスロットに接続します。以下のスロットは、これが変更された正しいセルであるかどうかをチェックし、そうであればそれを更新し、新しい行を作成します...少なくともこれを行う必要があります:
void RoleListingForm::newRole(QTableWidgetItem *itm)
{
if(itm->row() == 0 && itm->column() == 0)
{
QFont f = itm->font();
f.setItalic(false);
itm->setFont(f);
itm->setForeground(Qt::black);
ui->tblRoles->blockSignals(true); //////
ui->tblRoles->insertRow(0);
QTableWidgetItem *twl = new QTableWidgetItem("New Role");
f = twl->font();
f.setItalic(true);
twl->setFont(f);
twl->setForeground(Qt::gray);
ui->tblRoles->setItem(0, 0, twl);
ui->tblRoles->blockSignals(false); /////
}
}
を削除するblockSignals()
と、コードは無限ループに入り、 を離れるとblockSignals()
、通常は 3 つの乱数の行が作成されます...
これを機能させる方法はありますか?
背景情報: 私はこれを実装しようとしています: https://ux.stackexchange.com/questions/33331/about-the-creation-and-management-of-items
どうもありがとう