当前位置:C++技术网 > 资讯 > 如何做到可以弹出的小滑动条?本文简洁明了告诉你!

如何做到可以弹出的小滑动条?本文简洁明了告诉你!

更新时间:2016-01-20 17:34:33浏览次数:1+次

我们是不是一直想弄一个这样的窗口呢?

如何直接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。。。效果出来了。

本人实现的效果如下: