标签: qkeyevent

如何使用Qt禁用Alt + F4窗口关闭?

我使用这一行在我的对话框中禁用了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或禁用它?

qt qt4 keypress qdialog qkeyevent

13
推荐指数
2
解决办法
1万
查看次数

从Qt中的QKeyEvent获取密钥的"名称"

是否有一种简单的方法来获取密钥的名称(所以从关键事件中获取"uparrow"而不仅仅是获取密钥代码"16777235")?我是否必须自己制作一个关键名单?

c++ qt key qkeyevent

11
推荐指数
2
解决办法
2万
查看次数

Qt keyPressEvent在按下W/A/S/D键时没有注册

我有一个应用程序(与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)

c++ qt keypress qkeyevent qevent

7
推荐指数
2
解决办法
2947
查看次数

Qt Key Pressevent Enter

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.

我的司机或者程序的错误是否有问题?

qt keypress qkeyevent

6
推荐指数
2
解决办法
9283
查看次数

如何将Windows本机虚拟密钥代码转换为Qt :: Key?

我正在开发一个与Windows本机程序通信的程序,因此它需要actucal原生虚拟键代码.如何从Windows本机虚拟密钥代码转换为Qt :: Key?

qt keycode qkeyevent

5
推荐指数
2
解决办法
2235
查看次数

Qt 发送 keyPressEvent

我想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

c++ qt key-events keypress qkeyevent

5
推荐指数
1
解决办法
1万
查看次数

始终对隐藏的小部件有重点政策?(Qt C++)

我正在学习在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应用程序将所有键盘事件发送到此类,那将非常有用!

谢谢,

约翰

c++ qt qkeyevent

5
推荐指数
1
解决办法
1424
查看次数

覆盖QTextEdit子类中的keyPressEvent

我在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),现在我得到了同样的错误......

c++ qt qtextedit qkeyevent

4
推荐指数
1
解决办法
2504
查看次数

如何合成按键事件?

我可以通过 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() 没有被执行。

c++ qt qkeyevent qevent

4
推荐指数
1
解决办法
8497
查看次数

如何检查 [Shift + Tab] 在 QT 中是否被按下

如何检查是否按住 SHIFT 键并使用 QKeyEvent 按下 TAB 键?

我试过使用:

(event->key() == Qt::Key_Tab && event->modifiers() == Qt::ShiftModifier)
Run Code Online (Sandbox Code Playgroud)

但是,当按住 shift 键时event->key()不等于Qt::Key_Tab

c++ qt qkeyevent

4
推荐指数
1
解决办法
1102
查看次数

标签 统计

qkeyevent ×10

qt ×10

c++ ×7

keypress ×4

qevent ×2

key ×1

key-events ×1

keycode ×1

qdialog ×1

qt4 ×1

qtextedit ×1