qt 中要写网易云的搜索框,当你点击后,会弹出对应的窗口,其实使用过滤器就可以。
当点击lineEdit上就是:
当然目前我这样简单写的,代码非常简单:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->installEventFilter(this);
ui->lineEdit->setMouseTracking(true);
}
构造函数中让对象加入过滤器。
在头文件定义:
protected:
virtual bool eventFilter(QObject *watched, QEvent *event);//过滤器函数
在cpp 处理
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->lineEdit)
{
if(event->type() == QEvent::MouseButtonPress)
{
QMessageBox::information(this,"","first clicked");
qDebug()<< "first 1" <<endl;
return true;
}
else {
return false;
}
}
return QWidget::eventFilter(watched,event);
}
是不是很简单,晚上时候我会带大家下网易云搜索框的样式。