QLineEdit 仿QQ签名框

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

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

1.继承QLineEdit控件函数

2.QSS设置QLineEdit的相关样式,能够省下不少代码this

3.自定义相关事件url

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

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

首先,第一步你确定是要建立一个新类继承QLineEdit, QtCreator会自动为你实现一些可有可无的代码。code

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

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

首先构造函数中须要设置一些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

相关文章
相关标签/搜索