本文主要记录使用 Qt 实现某一些小功能的示例。
控件特定条件下显示
有些场合,需要隐藏界面某些功能,面向特定人员使用,如一些维护升级工具,面向现场支持人员和面向开发人员,所用之功能不同,但又不想同时维护多个工具,则可以隐藏部分功能。
本节演示双击某个提示语(使用 QLabel),再显示另一个按钮的功能。
0、设计
界面有2个控件:一为 QLabel,控件名称为lbShow
,显示提示语(文字可以为空,放置某个角落),一为 QPushButton,控件名称为btnRegister
,表示某个功能的按钮。
1、声明(实际为重载)事件过滤函数eventFilter
:
bool eventFilter(QObject *watched, QEvent *event);
2、隐藏按钮,针对lbShow
安装事件过滤器:
// 先隐藏注册按钮
ui->btnRegister->hide();
// 显示注册按钮的触发事件:// 双击左上方控件显示
ui->lbShow->installEventFilter(this);
3、实现事件过滤:
bool DialogDemo::eventFilter(QObject *watched, QEvent *event)
{
// 针对lbShow控件
if (watched == ui->lbShow)
{
//判断双击事件
if (event->type() == QEvent::MouseButtonDblClick)
{
// 双击显示
ui->btnRegister->show();
return true;
}
else
{
return false;
}
}
else
{
return QWidget::eventFilter(watched, event);
}
}
关于eventFilter
函数实现形式及返回值,可参考 Qt助手。一般来说,当自定义的事件处理完毕需要返回 true,如果不是监控的控件,交回父类处理。