双击一个 QLineEdit 为啥会产生一个 QEvent:KeyPress

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双击一个 QLineEdit 为啥会产生一个 QEvent:KeyPress相关的知识,希望对你有一定的参考价值。

参考技术A qt 4.7.1

#include <QtGui/QApplication>
#include <QLineEdit>

#include <QMouseEvent>
#include <QtDebug>

class HotkeyEdit: public QLineEdit

Q_OBJECT
public:
HotkeyEdit(QWidget *parent=0);
void mouseDoubleClickEvent ( QMouseEvent * event );
void keyPressEvent ( QKeyEvent * event );
;

HotkeyEdit::HotkeyEdit(QWidget *parent):QLineEdit(parent)



void HotkeyEdit::mouseDoubleClickEvent ( QMouseEvent * event )
qDebug() << "HotkeyEdit::mouseDoubleClickEvent";
event->ignore();


void HotkeyEdit::keyPressEvent ( QKeyEvent * event )

QKeySequence keySeq(event->modifiers() + event->key());
int keyCode=event->key();
if( (keyCode==Qt::Key_Control) || (keyCode==Qt::Key_Alt) || (keyCode==Qt::Key_Shift) || (keyCode==Qt::Key_Meta))

qDebug() << "keyCode:" << keySeq.toString() << event->key();
else

qDebug() << "KeyPress:" << keySeq.toString() << event->key();
setText(keySeq.toString());



int main(int argc, char *argv[])

QApplication a(argc, argv);
HotkeyEdit w;
w.show();

return a.exec();


#include "main.moc"本回答被提问者和网友采纳

为啥 QLineEdit Style 在聚焦时不改变?

【中文标题】为啥 QLineEdit Style 在聚焦时不改变?【英文标题】:Why doesn't QLineEdit Style change when focused?为什么 QLineEdit Style 在聚焦时不改变? 【发布时间】:2011-10-04 19:00:17 【问题描述】:

我正在使用 Qt 及其样式表开发一个 GUI。在主窗口样式表中,我添加了以下样式:

QLineEdit:focus 
    border: 2px solid #006080;

但是当我使用它时,风格并没有像我预期的那样真正改变。但是,如果我将相同的样式表直接放在所需的组件上,它就像魔术一样工作!但是,将样式表放在我可能想要的每个 LineEdit 上并不是一个好主意(这将大大增加添加新组件或更改样式表所需的工作量),也不是通过添加代码行来重新应用样式表,例如 @ 987654322@.

有人知道怎么解决吗?

【问题讨论】:

【参考方案1】:

奇怪,它可以在我的 Qt 副本上使用 QLineEdit:focus 使用

QLineEdit:focus

    border: 2px solid #006080;

你确定你在更远的地方没有一个子风格来推翻这个吗?因为它在 MainWindow 上,所以首先要被否决。

一种可能的解决方法是使用事件过滤器:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);

    ui->lineEdit->installEventFilter( this );
    ui->lineEdit_2->installEventFilter( this );


...

bool MainWindow::eventFilter( QObject *object, QEvent *event )

    QLineEdit* edit = qobject_cast< QLineEdit* >( object );

    if( edit != NULL )
    
        if( event->type( ) == QEvent::FocusIn )
        
            edit->setStyleSheet( QString( "border: 10px solid #000000;" ) );
        
        else if( event->type( ) == QEvent::FocusOut )
        
            edit->setStyleSheet( QString( "border: 1px solid #000000;" ) );
        
    

当然,QStyleSheets 只是简单的 QString,因此您可以将预定义的样式存储起来以供使用。

【讨论】:

请不要那样做【参考方案2】:

如果需要,您可以像这样以编程方式设置焦点样式:

QString styleSheet = "QLineEdit  border: 1px solid; border-color:#dcdcdc; border-radius: 4px; QLineEdit:focusborder:1px solid gray;";

yourFancyEdit->setStyleSheet(styleSheet);

【讨论】:

以上是关于双击一个 QLineEdit 为啥会产生一个 QEvent:KeyPress的主要内容,如果未能解决你的问题,请参考以下文章

Qt - QLineEdit编辑框

在 returnPressed 时从 QGraphicsScene 中删除 QLineEdit 代理小部件

将一个字符数组分配给另一个会产生错误。为啥?

Qt中想产生可以随一些条件变化的文本,像是QLabel那样只能看到文字的

为啥这个Iterable在映射后会产生一个Set?

为啥这个 node-mysql 插入会产生一个数组?