关于qt:QTableWidget动态行创建 |
您所在的位置:网站首页 › 刺客信条黑旗633784宝藏在哪 › 关于qt:QTableWidget动态行创建 |
我正在尝试在itemChanged信号的QTableWidget中创建新行。这是代码: 12345678910111213Constructor:: { 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*))); }以上内容为表格创建了初始行,并将信号连接到插槽。下面的插槽检查这是否是正确的已更改单元,如果是,将对其进行更新,并创建新行...至少应执行以下操作: 12345678910111213141516171819202122void 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(),它将创建随机数的行,通常为三行... 任何想法如何使这项工作有效吗? 背景信息:我正在尝试实施此操作:https://ux.stackexchange.com/questions/33331/about-the-creation-and-management-of-items 非常感谢 相关讨论 ui-> tblRoles-> setItem(0,0,twl);当左上角的项目发生变化时,您将在此处替换左上角的项目。从链接的UX问题中,我收集到您想要追加新行的信息。因此,请尝试使用appendRow()代替。因此,经过研究后,阅读文档后,这种滑稽行为的原因或多或少是不言而喻的: 123void QTableWidget::itemChanged ( QTableWidgetItem * item ) [signal] This signal is emitted whenever the data of item has changed.正在发生的事情如下: 我打电话: 12itm->setFont(f); itm->setForeground(Qt::black);但是Qt会将它们全部转换为"数据"更改,并且由于我在这两次调用之后都阻塞了信号,因此显然我又多了2行。 因此,将blockSignals放在字体/颜色更改之前,它会起作用。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |