FocusInEvent()与FocusOutEvent()
来源:互联网 发布:linux不允许用户登录 编辑:程序博客网 时间:2024/06/10 12:58
描述:一开始我要实现的目的就是,在一个窗体上有多个可编辑控件(比如QLineEdit、QTextEdit等),当哪个控件获得焦点,哪个控件的背景就高亮用来起提示作用,查了下文档应该用focusInEvent()和focusOutEvent(), 在实际过程中,我犯了十分严重的错误,最开始的时候我是这样做的:我重写了窗体QWidget的这两个函数,然后再在函数体中把QFocusEvent事件传递给窗体上的QLineEdit控件:
void Widget::focusInEvent(QFocusEvent *event){ QLineEdit::focusInEvent(event); .....}
编译的时候报错,说是没有调用对象什么的,后来问了下朋友才得到了完美的答案:
既然是要控件得到焦点改变动作,则应该重写该控件的focusInEvent()和focusOutEvent(),即重写QLineEdit类,再重新定义这两个处理函数,然后再在主程序中,include 我们自己重写的QLineEdit头文件,具体代码如下:
// MYLINEEDIT_H#ifndef MYLINEEDIT_H#define MYLINEEDIT_H#include <QLineEdit>class MyLineEdit : public QLineEdit{ Q_OBJECT public: MyLineEdit(QWidget *parent=0); ~MyLineEdit(); protected: virtual void focusInEvent(QFocusEvent *e); virtual void focusOutEvent(QFocusEvent *e);};#endif // MYLINEEDIT_H`//myLineEdit.cpp#include "myLineEdit.h"MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent){}MyLineEdit::~MyLineEdit(){}void MyLineEdit::focusInEvent(QFocusEvent *e){ QPalette p=QPalette(); p.setColor(QPalette::Base,Qt::green); //QPalette::Base 对可编辑输入框有效,还有其他类型,具体的查看文档 setPalette(p);}void MyLineEdit::focusOutEvent(QFocusEvent *e){ QPalette p1=QPalette(); p1.setColor(QPalette::Base,Qt::white); setPalette(p1);}`//widget.cpp#include "widget.h"#include "ui_widget.h"#include "MyLineEdit.h"#include <QGridLayout>#include <QMessageBox>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); init();}Widget::~Widget(){ delete ui;}void Widget::init(){ lineEdit1=new MyLineEdit(this); lineEdit2=new MyLineEdit(this); gridLayout=new QGridLayout; gridLayout->addWidget(lineEdit1,0,0); gridLayout->addWidget(lineEdit2,1,0); setLayout(gridLayout);}
上图为程序范例,当某个文本框获得焦点后背景自动填充为绿色,失去焦点后背景恢复白色,这样就达到了我想要的焦点高亮背景提醒功能,但是实际分析想来还是很复杂的,假如我的程序还有QTextEdit、QSpinBox等等控件,那我还要全部都重写这些类,麻烦…我原本以为Qt提供了这种获得与失去焦点的信号,可惜没有,期待以后版本加上,就更加方便了…
- FocusInEvent()与FocusOutEvent()
- Focus问题终结帖,setFocus, focusInEvent,focusOutEvent
- QT focusInEvent 事件
- QT focusInEvent 事件
- 由于现在在看QT 所以,转载写文章 -- QT focusInEvent 事件
- 与
- 与
- “” 与 “”
- ##与#
- >> 与 > >
- :与::
- &与&&
- && 与 &
- [[与((
- >>与>>>
- *与++
- *与++
- ++与++
- STM32系统时钟
- linux设备驱动归纳总结(五):1.在内核空间分配内存
- js特殊字符验证
- 展讯的8825平台 在TP上实现距离传感器的功能
- shell 启动新的终端并运行命令
- FocusInEvent()与FocusOutEvent()
- 邮件服务器MX设置
- block2
- Social media sharing codes(各大网站网址分享功能代码)
- nginx一些常用命令
- HDU 敌兵布阵
- Red Hat 企业版5.x ORALCE10g 安装自动配置环境参数及oracle用户创建和参数修改脚本
- 通用栈的实现
- HDU 3374 String Problem KMP-最小最大表示法