• 12051阅读
  • 7回复

QT4中怎样产生类似硬键盘Backspace按下的事件 [复制链接]

上一主题 下一主题
离线磐石
 
只看楼主 正序阅读 楼主  发表于: 2009-11-06
当向QTextEdit输入文本过程序中,要向前删除一个字符,我们只要按一下硬键盘的Backspace,那么这种按下Backspace事件在QT中怎样产生呢,只要我一触发这个事件,正在执行输入的QTextEdit就会向前删除一个字符。
请大家指点一下,谢谢!
不怕做不到,只怕想不到
离线spz717830
只看该作者 7楼 发表于: 2011-10-12
楼主问题解决了吗?  我也遇到这个问题  还没有解决。   贴个解决方法来研究研究。。。
离线磐石
只看该作者 6楼 发表于: 2009-11-11
引用第3楼jorneyr于2009-11-06 16:42发表的  :
void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )   [static]
Adds the event event, with the object receiver as the receiver of the event, to an event queue and returns immediately. // 发送事件后立即返回,不等待执行结果
bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event )   [static]
.......

我先定义了这样一个事件
QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Backspace,Qt::NoModifier, ch, false, 1);
再用postEvent()发送
QApplication::postEvent(qApp->focusWidget(), &keyEvent);
但是当我按下backspace时提示这样的错误
QWSLock::unlock: Invalid argument
QWSLock::lock: Invalid argument
QWSLock::lock: Invalid argument
我想问一下产生的事件能夸进程的吗,
运行的软键盘是一个应用程序,接受字符的文本是在另一个应用程序中的,
那么软键盘上产生的这个事件怎样才能让别一个应用程序接收到呢
不怕做不到,只怕想不到
离线磐石
只看该作者 5楼 发表于: 2009-11-06
非常感谢楼上两位,我自己在研究研究
不怕做不到,只怕想不到
离线dbzhang800

只看该作者 4楼 发表于: 2009-11-06
楼上正解。

楼主慢慢熟悉C++和Qt吧,急不来的,qt-apps上两个软键盘的例子你都可以试着看看。


“ sendCommitString("A");就是发送一个A字符,但是对于Backspace的SLOT函数就不知道怎么写了, ”
这儿其实都存在概念性问题
离线jorneyr

只看该作者 3楼 发表于: 2009-11-06
void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )   [static]
Adds the event event, with the object receiver as the receiver of the event, to an event queue and returns immediately. // 发送事件后立即返回,不等待执行结果


bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event )   [static]
Sends event event directly to receiver receiver, using the notify() function. Returns the value that was returned from the event handler. // 发送事件后等待直到事件接收者的slot函数执行完。

The event is not deleted when the event has been sent. The normal approach is to create the event on the stack, for example:

QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0);
QApplication::sendEvent(mainWindow, &event);
离线磐石
只看该作者 2楼 发表于: 2009-11-06
引用第1楼dbzhang800于2009-11-06 13:25发表的  :
你能介绍一下你要做什么么?
是下面的两类中的一个么?
如果你只是需要给你的程序添加软键盘,qt-apps.org 有现成的例子。
.......

恩,先谢谢,我是想写个软键盘,qt-apps.org 中下了几个例子看了一下,看不懂,里面的设计思路与我的好像不一样,我的思路很简单,就要定义很多QPushButton,对每个按钮都写了一个SLOT函数,比方说我定义一个按钮叫作ABtn,他对应的SLOT是Aclicked()
connect(ABtn,SINAGL(clicked()),this,SLOT(Aclicked()));
Aclicked()里面是这样的,sendCommitString("A");就是发送一个A字符,但是对于Backspace的SLOT函数就不知道怎么写了,我是想它的SLOT函数里产生一个类似硬键盘Backspace按下的事件,这样就可以实现当Backspace按下时,正在输入的QTextEdit能删除一个字符。呵呵,我刚学QT不久,设计想法很简单,不知道这样能不能实现,请指点一下,谢谢。
不怕做不到,只怕想不到
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-06
你能介绍一下你要做什么么?

是下面的两类中的一个么?

如果你只是需要给你的程序添加软键盘,qt-apps.org 有现成的例子。

如果你需要的是类似输入法提供的全局性的软键盘,你应该找合适的系统调用。
快速回复
限100 字节
 
上一个 下一个