首页| 论坛| 消息

标题:Qtableview 如何委托实现按下回车到下一行?
作者:lastforest
日期:2020-08-12 20:16
内容:

qt 新手一枚。
我想实现给tableview的所有行都委托一个LINEEDIT,设置lineEdit的样式,现在我成功实现了将lineedit委托在QtableView的单元格中,
并限制各行中LINEEDIt的输入,如只能是数字,只能是字母或者其他等等,但是现在在lineedit中按下回车,如何到下一行难住我了,请各位大神指导:
我的委托类的代码如下:
cpp 的代码~

#include "grddelegate.h"#include #include #include #include #include

LineEidtDelegate::LineEidtDelegate(QObject *parent)
: QStyledItemDelegate(parent){ // Frow = row;}
QWidget *LineEidtDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelI ..


#1 [lastforest 08-13 19:45]
难道有这么难么, 我感觉是一个比较简单的问题啊 ,为什么这么多浏览,没人回答呢~~!
#2 [lastforest 08-13 19:47]
我是想,能不能在eventFilter里捕获key_Return,然后发射信号,再在主程序里处理,但是我实在是不知道,如何获取委托类发射的信号,真的是难到我了!
#3 [alexltr 08-16 12:33]
前段时间我也在做相同的需求:
if 按回车键
if 内容合法
if 不是在最后一行,则定位到下一行
if 是在最后一行,则增加一行,并定位到新增的行

一开始也是想在delegate里面实现,但尝试后还是改在主程序里去处理了,主要是好判断及定位tableView的当前位置
tableView->installEventFilter(this);
evenFilter的代码大概如下, 供参考.
你也可以继续在delegate里尝试,有结果后再跟大家分享一下

//当用户在tableViewXXX的最后一行按向下键或回车键时,新增加一行
bool xxxEditor::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast(event);
QModelIndex index = ui->tableViewXXX->currentIndex();
if (keyEvent->key() == Qt::Key_Down || keyEvent->key() == Qt::Key_Return
|| keyEvent->key() == Qt::Key_Enter) {
QString XXXCode = mXXXModel->data(index, Qt::EditRole).toString();
//如果输入的XXX代码正确
if (!XXXCode.isEmpty()) {
//如果当前是最后一行,则添加一行
if (index.row() == mXXXModel->rowCount() - 1) {
& ..
#4 回 lastforest 的帖子 [alexltr 08-16 12:43]
lastforest:我是想,能不能在eventFilter里捕获key_Return,然后发射信号,再在主程序里处理,但是我实在是不知道,如何获取委托类发射的信号,真的是难到我了!   (2020-08-13 19:47) 
connect(ui->tableView->itemDelegate(), SIGNAL().......
这个捕捉不到信号吗?
#5 [lastforest 08-21 16:12]
是的,终于尝试试成功了。就是用信号
电脑坏了,源码发不上来了。大致是在eventfilter中发射信号,在主调用程序中处理。
主要是要申明一个delegate实例,就能取得信号了。

回复 发表
主题 版块