我使用这一行在我的对话框中禁用了Qt中的X按钮:
myDialog->setWindowFlags(Qt::Dialog | Qt::Desktop)
Run Code Online (Sandbox Code Playgroud)
但我无法使用此代码检测到Alt+ F4:
void myClass::keyPressEvent(QKeyEvent *e)
{
if ((e->key()==Qt::Key_F4) && (e->modifiers()==Qt::AltModifier))
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能在Qt中检测Alt+ F4或禁用它?
是否有一种简单的方法来获取密钥的名称(所以从关键事件中获取"uparrow"而不仅仅是获取密钥代码"16777235")?我是否必须自己制作一个关键名单?
我有一个应用程序(与W/A/S/D键可能具有特殊导航含义的任何游戏无关),其中有一个QFrame
.我重写了keyPressEvent()
以便通过键盘输入文本,同时专注于此QFrame
.这是我的代码:
void MyFrame::keyPressEvent(QKeyEvent *event)
{
qDebug() << "At least came here" << endl;
QString text = event->text();
qDebug() << "Text: " << text << endl;
}
Run Code Online (Sandbox Code Playgroud)
当我一次从键盘输入一个字符时,对于所有字符和数字,两个语句都会正确记录.但是对于这四个键,都没有执行日志语句,即事件处理程序甚至没有触发.怎么了?
编辑:在通过示例之后,我试图形成我的bug的最小工作示例.这就是我所拥有的.这里也有同样的问题,通过事件过滤器来完成它.仅对于这四个字符,它不会被记录.
bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
//this never gets printed
qDebug() << "Phew!" << endl;
return true;
}
if (qobject_cast<ChildWidget *>(obj) != nullptr)
{
ChildWidget *option = qobject_cast<ChildWidget *>(obj);
if (event->type() == QEvent::Enter || event->type() == QEvent::MouseMove)
{
//do stuff
return …
Run Code Online (Sandbox Code Playgroud) void LoginModle::keyPressEvent(QKeyEvent *event)
{
qDebug() << event->key() << "\t" << Qt::Key_Enter << "\t" << QKeyEvent::Enter;
if( event->key() == Qt::Key_Enter)
OKButtonClicked();
else
QDialog::keyPressEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
这段代码非常简单,类LoginModle
继承自QWidget
.运行此代码,当我按下时Enter,它显示:
16777220 16777221 10
Run Code Online (Sandbox Code Playgroud)
这意味着我Enter的键盘是16777220
,但在Qt中,它被定义为16777221
.
我的系统是Elementary OS(Freya),它基于Ubuntu 14.04.
我的司机或者程序的错误是否有问题?
我正在开发一个与Windows本机程序通信的程序,因此它需要actucal原生虚拟键代码.如何从Windows本机虚拟密钥代码转换为Qt :: Key?
我想QLineEdit
通过发送 KeyEvent来附加字符。我正在使用这样的代码:
ui.myEdit->setFocus();
for(size_t i = 0; i < 10; ++i) {
QKeyEvent keyPressed(QKeyEvent::KeyPress, 'a', Qt::NoModifier);
QWidget::keyPressEvent(&keyPressed); // or
//QApplication::sendEvent(QApplication::focusWidget(), &keyPressed);
}
Run Code Online (Sandbox Code Playgroud)
为什么没有变化myEdit
?
我正在学习在Qt(C++)中处理keypress和keyrelease事件.我有一个类键盘,我想处理所有这些事件.它继承了QObject.它不需要处理任何鼠标事件.我试图找出当我的应用程序对该类打开时如何指示所有键盘输入.
我已经尝试将它作为一个小部件添加到我的MainWindow类的布局中并隐藏它(小部件,而不是布局).目前,这没有回应.
我也在我的MainWindow课程中尝试过这个:
void MainWindow::keyPressEvent(QKeyEvent *event)
{
keys->keyPressEvent(event);
//Keys is a Keyboard object with this public method:
//void keyPressEvent(QKeyEvent *event);
}
Run Code Online (Sandbox Code Playgroud)
但那也没有用.在我的Keyboard :: Keyboard()构造函数中,我有:
this->setFocusPolicy(Qt::StrongFocus);
Run Code Online (Sandbox Code Playgroud)
我不确定是否还需要做其他事情以确保键盘输入到达那里.
如果有人知道如何为我的Qt应用程序将所有键盘事件发送到此类,那将非常有用!
谢谢,
约翰
我在Qt中有以下示例,其中我尝试覆盖QTextEdit的子类的keyPressEvent,但是给了我"txt :: keyPressEvent(QKeyEvent*)的多重定义",我无法弄清楚原因:
//txt.h
#ifndef TXT_H
#define TXT_H
#include <QTextEdit>
class txt : public QTextEdit
{
Q_OBJECT
public:
txt(QWidget *parent = 0);
signals:
void keyPressEvent(QKeyEvent *e);
public slots:
};
#endif // TXT_H
//txt.cpp
#include "txt.h"
txt::txt(QWidget *parent) :
QTextEdit(parent)
{
}
void txt::keyPressEvent(QKeyEvent *e){
//do stuff with the key event
}
//main.cpp
#include <QtGui/QApplication>
#include "txt.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
txt w;
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
我试着在txt.h中声明QTextEdit并且只在cpp中#include它,但这给了我一些其他错误(可能是因为我需要头文件中的类,因为我正在对它进行子类化?)
无论如何,我做错了什么?
编辑:我也尝试了另一个类(QLabel),现在我得到了同样的错误......
我可以通过 Qt 中的回调函数从 HAL 获取键值。为该键创建了事件
QKeyEvent *event = new QKeyEvent (QEvent::KeyPress,
inputKey.keyValue,
Qt::NoModifier);
Run Code Online (Sandbox Code Playgroud)
注意:inputKey.keyValue
从 HAL 层接收的键值。
现在我需要在 Qt 中注册此按键事件,以便如果 IR Remote 中发生任何按键,则以相应的形式keyPressEvent(e)
或event(e)
将被调用。并且根据按键,将执行特定的操作。
注意:有不止一种形式,其中按键事件将被触发并且有不止一种按键“Page_Up,Page_Down,Ok Key等等......”
尝试调用 Postevent() 和 connect(.......) 但没有任何帮助我。KeyPressEvent() 没有被执行。
如何检查是否按住 SHIFT 键并使用 QKeyEvent 按下 TAB 键?
我试过使用:
(event->key() == Qt::Key_Tab && event->modifiers() == Qt::ShiftModifier)
Run Code Online (Sandbox Code Playgroud)
但是,当按住 shift 键时event->key()
不等于Qt::Key_Tab
。