QTableWidgetItem 文本已更改
QTableWidgetItem text changed
本文关键字:文本 QTableWidgetItem 更新时间:2023-10-16
我正在寻找一种干净的方式来在QTableWidgetItem
更改其文本时对事件做出反应。我尝试使用信号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++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- PyQT - 在 QTableWidget 单元格中显示垂直文本
- QTableWidget 和 QLineEdit - 位置和文本内容
- 从 Qtabewidgetitem 中更改的文本获取文本 qtablewidget
- 如何从QTableWidget::setCellWidget()中获取文本
- Qt - 如何测试 QTableWidget 项的文本是否为整数
- Qt:从QTableWidget中的按钮获取文本
- QT C++ QTableWidget(Item) 部分斜体(强调)文本