gpt4 book ai didi

c++ - QTableWidgetItem 文本已更改

转载 作者:行者123 更新时间:2023-11-30 04:48:42 25 4
gpt4 key购买 nike

如果 QTableWidgetItem 已更改其文本,我正在寻找一种干净的方式来对事件使用react。我尝试使用 Signal QTableWidget::itemChanged(QTableWidgetItem *item) 但这会导致错误,因为我更改了我的 QTableWidgetItem 的背景颜色插槽,然后递归执行此插槽,因为 itemChanged。

我也尝试过使用信号 QTableWidget::itemEntered(QTableWidgetItem *item),但这与一些鼠标事件有关,这对我来说并不适用。

我尝试过的最后一种方法是像这样覆盖自定义 QTableWidget 类中的事件过滤器:

    bool custom_DropTable::eventFilter(QObject *obj, QEvent *evt)
{
if (evt->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(evt);
if (keyEvent->key() == Qt::Key_Return)
{
emit si_itemTextEntered(this->currentItem());
return true;
}
else
{
return false;
}
}
else
{
return QObject::eventFilter(obj, evt);
}
}

但即使按下回车,信号也永远不会真正到达,所以设置文本。

有人对我有什么建议或改进吗?

最佳答案

您可以使用 QObject::blockSignals 使您的小部件不发送信号.这样你就可以使用信号 QTableWidget::itemChanged(QTableWidgetItem* item) 连接到一个插槽,该插槽将首先阻止表的信号,然后更改项目,然后取消阻止信号。这里有一个最小的例子:

#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>

// Declare table globaly so the slot can block its signals
QTableWidget* table;

// Slot
void itemChanged(QTableWidgetItem* item)
{
// Block table signals
table->blockSignals(true);

// Change item background color
item->setBackgroundColor(Qt::red);

// Append text
item->setText(item->text() + " edited");

// Unblock signals
table->blockSignals(false);
}

int main(int argc, char** argv)
{
// Create application
QApplication app(argc, argv);

// Create table
table = new QTableWidget(3, 4);

// Add items
for (int i = 0; i < table->rowCount() * table->columnCount(); i++)
{
int row = i / table->columnCount();
int col = i % table->columnCount();
table->setItem(row, col, new QTableWidgetItem(QString::number(i)));
}

// Connect
QObject::connect(table, &QTableWidget::itemChanged, itemChanged);

// Show table
table->show();

// Run
return app.exec();
}

关于c++ - QTableWidgetItem 文本已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55723887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com