QTableWidget中编辑单元格,如何实现按下Enter键实现对文件名是不是重复的判断?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QTableWidget中编辑单元格,如何实现按下Enter键实现对文件名是不是重复的判断?相关的知识,希望对你有一定的参考价值。

越详细越好,如果答案准确可追加奖励!先谢谢了。。。(具体判断重复的代码我已经实现,我现在只需要确定如何捕获Enter键所在的编辑区域,即模拟Windows下新建文件夹时按下Enter的过程)
如图所示,我将新建文件夹(5)改为新建文件夹(4),按下Enter就会出现“文件名冲突”的提示!
分享一下吧!这个问题我解决了,其实思路一直很正确,就是哎。。。坑爹的单词!
Qt::Key_Return和Qt::Key_Enter你懂得!
tableWidget->installEventFilter(this);//注册事件过滤器
bool Widget::eventFilter(QObject*obj,QEvent*event)

if(obj == tableWidget)

if(event->type() == QEvent::KeyPress)

QKeyEvent*keyEvent=static_cast<QKeyEvent*>(event);//将事件转化为键盘事件
if(keyEvent->key() == Qt::Key_Return)

qDebug()<<keyEvent->key()<<Qt::Key_Return;
return true;

else

qDebug()<<keyEvent->key()<<Qt::Key_Enter;


else

return false;


else

returnQObject::eventFilter(obj,event);

参考技术A 捕获 tableWidget.model 的dataChanged事件
connect(tw.model(),SIGNAL(dataChanged(QModexIndex*,QModexIndex *)),this,SLOT(...))本回答被提问者采纳
参考技术B 这种情况下 按回车键不起作用吗?追问

要执行槽函数的!不是随随便便的。。。

如何将文本与 QTableWidget 中的单元格中心对齐

【中文标题】如何将文本与 QTableWidget 中的单元格中心对齐【英文标题】:How to align the text to center of cells in a QTableWidget 【发布时间】:2018-06-06 20:45:10 【问题描述】:

我正在使用基于 Qt4 的 PyQt。我的编辑器是 PyCharm 2017.3,我的 python 版本是 3.4。我正在从网站上抓取一些文本。我正在尝试将该文本与 QTableWidget 中单元格的中心对齐。

item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)
self.tableWidget.setItem(x, 2,item)

因此,在将项目放入单元格时,我试图按照documentation 对齐它。问题是数据没有显示出来。

当我删除 setTextAlignment 方法时它确实出现了,如下所示

item = QTableWidgetItem(scraped_age)
self.tableWidget.setItem(x, 2,item)

【问题讨论】:

【参考方案1】:

这行代码:

item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)

将无法正常工作,因为它会在将其分配给变量之前丢弃它创建的项目。该变量实际上将设置为None,这是setTextAlignment() 的返回值。相反,您必须这样做:

item = QTableWidgetItem(scraped_age) # create the item
item.setTextAlignment(Qt.AlignHCenter) # change the alignment

【讨论】:

Qt.AlignHCenter 将在单元格顶部水平居中,Qt.AlignCenter 将居中于单元格的中心(水平和垂直)。【参考方案2】:

这对我不起作用,我不确定是因为我使用的是 PyQt5 还是我做错了什么。我试图找到类似的东西,但对于整张桌子,我终于偶然发现了一些有效的东西,可以让你一次将每个单元格或一列居中。

你必须使用委托方法:

#You're probably importing QtWidgets to work with the table
#but you'll also need QtCore for the delegate class
from PyQt5 import QtCore, QtWidgets

class AlignDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(AlignDelegate, self).initStyleOption(option, index)
        option.displayAlignment = QtCore.Qt.AlignCenter

在您的代码中实现此功能后,您可以将以下内容添加到您的主窗口类或定义表的任何位置:

delegate = AlignDelegate(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(2, delegate) #You can repeat this line or
                                                       #use a simple iteration / loop
                                                       #to align multiple columns

 #If you want to do it for all columns:
 #self.tableWidget.setItemDelegate(delegate)

知道这是一个老问题,但希望它可以帮助别人。

【讨论】:

当使用 AbstractTable 模型时,这种委托机制是一种更好的解决方案。【参考方案3】:

聚会有点晚了,但是对于那些想知道如何在 pyqt5 上做到这一点的人来说

table = QTableWidgetItem() #QTWidgets.QTableWidgetItem() if importing QWidget from PyQt5

table.setTextAlignment(number)

setTextAlignment 采用 int 作为参数(对齐)。输入数字得到结果:

0:左 1:左 2:对 3:对 4:中心

【讨论】:

以上是关于QTableWidget中编辑单元格,如何实现按下Enter键实现对文件名是不是重复的判断?的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉 QTableWidget 结束编辑单元格?

QTableWidget,停止QTableWidgetItem的编辑

QTableWidget:检测单元格编辑开始的信号

QTableWidget中如何动态分配单元格

如何判断QTableWidget中的单元格是处于选中状态还是正在编辑的状态(即光标进入)?如下图:

QTableWidget:用于检测单元格编辑开始的信号