zoukankan      html  css  js  c++  java
  • [Qt] QLineEdit 仿QQ签名框

    今天鼓捣了半天,终于实现了自定义Qt中的QlineEdit控件的大致效果。

    这个问题对于新手而言,主要有以下几个难点:

    1.继承QLineEdit控件

    2.QSS设置QLineEdit的相关样式,可以省下很多代码

    3.自定义相关事件

    void mousePressEvent(QMouseEvent *event);  // 鼠标点击的时候,编程输入框
    void keyPressEvent(QKeyEvent *event);   // 按下Enter的时候,处理
    void mouseMoveEvent(QMouseEvent *event); // 鼠标移动的时候,显示效果

    OK,下面我们来一步步实现这个自定义控件。

    首先,第一步你肯定是要创建一个新类继承QLineEdit, QtCreator会自动为你实现一些无关紧要的代码。

    第二步用PhotoShop做一个突出的高亮图片,像QQ签名框上的那样:

    第三步开始实现具体的代码了。

    首先构造函数中需要设置一些QSS样式,这一步可以省下很多代码,具体样式对应的功能,请读者自行研究。

    this->setStyleSheet("QLineEdit{ background:rgba(0,0,0,0%); border:1px; font:10pt}"
                        "QLineEdit:hover{ border-image:url(:/btn_background.png); }"
                        "QLineEdit:!hover{background:rgba(0,0,0,0%);}"
                        "QLineEdit:focus {background:white;border-image:none; border:1px groove lightgray; border-radius:2px}");

    实现三个继承的事件函数:

    void QSLineEdit::keyPressEvent(QKeyEvent *event)
    {
        if(event->key() == Qt::Key_Enter - 1)
            this->clearFocus();
    
        QLineEdit::keyPressEvent(event);
    }
    
    void QSLineEdit::mousePressEvent(QMouseEvent *event)
    {
        this->setFocus();
        this->setCursor(QCursor(Qt::IBeamCursor));
        QLineEdit::mousePressEvent(event);
    }
    
    void QSLineEdit::mouseMoveEvent(QMouseEvent *event)
    {
        if(this->hasFocus())
            this->setCursor(QCursor(Qt::IBeamCursor));
        else
            this->setCursor(QCursor(Qt::ArrowCursor));
        QLineEdit::mouseMoveEvent(event);
    }

    到这一步基本上实现全部效果了,但是有一个问题需要注意:当点击窗体其他地方的时候,这个自定义控件不会失去焦点,即时你继承focusOutEvent也不会;没办法,所以在窗体中多实现了一个事件mousePressedEvent

    void Dialog::mousePressEvent(QMouseEvent *e)
    {
        leEdit->clearFocus();
        QDialog::mousePressEvent(e);
    }

    至此OK,开起来很简单的问题,确想了我半天事件。源代码在:WidgetEdit.rar

     转载请注明出处:http://www.cnblogs.com/xufeiyang/p/3310670.html

  • 相关阅读:
    Hibernate---对象的三种状态
    grunt+bower依赖管理
    grunt 的安装和简单使用
    sqlserver dmv 动态管理视图
    ado.net 数据库连接池
    桥接模式
    .net MVP
    主定理(分治算法)
    图中环的判断
    选举协议paxos 协议 理解
  • 原文地址:https://www.cnblogs.com/xufeiyang/p/3310670.html
Copyright © 2011-2022 走看看