我们是不是一直想弄一个这样的窗口呢?
如何直接New一个QSlider,我们就会看到生成的QSlider是一个单独的窗口,不能实现这个点击音量弹出,点击别的地方关闭的效果。这个效果如何做?
其实这个效果利用的是QToolButton实现的。
首先来看代码:
setPopupMode(QToolButton::InstantPopup);/*这个很重要,标记了窗口的弹出模式,我们就需要这个*/
QWidget *popup = new QWidget(this);//生成我们学校的小部件(显示音量的窗口)
slider = new QSlider(Qt::Horizontal, popup);//生成一个我们需要的那个滑动条
slider->setRange(0, 100);//设置值域
connect(slider, SIGNAL(valueChanged(int)), this, SIGNAL(volumeChanged(int)));//链接
label = new QLabel(popup);//生成一个label,用于标记当前音量
label->setAlignment(Qt::AlignCenter);//布局,设置中心对称
label->setNum(100);//设置最大值100
label->setMinimumWidth(label->sizeHint().width());//设置尺寸
connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));//链接
QBoxLayout *popupLayout = new QHBoxLayout(popup);//建立布局
popupLayout->setMargin(2);//建立篮子(装控件的),外国人思维太奇妙了。。
popupLayout->addWidget(slider);//slider装进篮子
popupLayout->addWidget(label);//Label装进篮子
QWidgetAction *action = new QWidgetAction(this);//新建部件的动作(就是弹出的内容)
action->setDefaultWidget(popup);//弹出那个窗口
menu = new QMenu(this);//新建菜单(用于添加上面的那个动作↑)
menu->addAction(action);//在这个菜单中增加一个内容(就是显示我们的那个滑动条)
setMenu(menu);//在哪个按钮上显示出菜单
代码写的很清晰,首先我们拖一个QToolButton放在UI设计版中。然后我们在构造函数中加入上面的代码,这样,程序执行的时候,菜单被构造完毕。so。。。效果出来了。
本人实现的效果如下: