现在的软件很多都支持双击重命名的操作,就像在windows下对某个文件夹重命名一样(如下图)
不巧之前也遇到过类似的设计问题,不过是在界面上对某个控件。现在整理一下,控件就用QPushButton来代替。
对一个Button双击重命名,其实总结起来就是一下几点:
1、鼠标双击开始重命名,也就是一个QLineEdit完全覆盖之前的Button
2、鼠标点击其他区域,退出重命名状态,保留之前的名字
3、按下键盘的回车键,完成重命名操作,显示新的名字
下面开始一步一步来。
首先第一点。一个Button能够支持鼠标的双击操作,那肯定是必须重写mouseDoubleClickEvent()这个函数,于是自定义一个子类MyButton,继承自QPushButton,重新实现那个函数。在函数体中,检测是否是鼠标左键按下(因为双击鼠标左键触发重命名),然后显示一个QlineEdit(暂时是它,后面还要改变),同时指定它的父类是MyButton,大小与MyButton一样,就可以完全覆盖之前的Button。QLineEdit中的selectAll()函数可以全选当前内容,当然最后不能忘记调用QPushButton本身的mouseDoubleClickEvent()。代码和实现的效果如下
void MyButton::mouseDoubleClickEvent(QMouseEvent *event) { if(event->button()==Qt::LeftButton) { edit->setParent(this); QString ButtonText = this->text(); edit->setText(ButtonText); edit->resize(this->size()); edit->show(); edit->setFocus(); edit->selectAll(); QPushButton::mouseDoubleClickEvent(event); } }