关于qt:QTableWidget动态行创建

您所在的位置:网站首页 刺客信条黑旗633784宝藏在哪 关于qt:QTableWidget动态行创建

关于qt:QTableWidget动态行创建

2023-03-09 23:51| 来源: 网络整理| 查看: 265

我正在尝试在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