out* layout = new QFormLayout(this);
// 创建三个滑条
QSlider* slider1 = new QSlider;
slider1->setRange(0,255); // 有效范围
QSlider* slider2 = new QSlider;
slider2->setRange(0,255);
QSlider* slider3 = new QSlider;
slider3->setRange(0,255);
// 设置滑条的方向是水平方向
slider1->setOrientation(Qt::Horizontal);
slider2->setOrientation(Qt::Horizontal);
slider3->setOrientation(Qt::Horizontal);
// 把它们添加到布局中
layout->addRow("Red:", slider1);
layout->addRow("Green:", slider2);
layout->addRow("Blue:", slider3);
// 设置边框为面板
this->setFrameShape(QFrame::Panel);
}
滑块条是 QSlider 组件,它默认的方向是垂直的,所以要将方向设定为水平。自定义组件还用到了 QFormLayout 类,它是布局类,类似 HTML Form 元素的布局方式,即表单。一般分为两列,左列是字段标题,右列是字段内容。
CustWidget 组件定义好了,接下来就是 MyWidgetAction 类,派生自 QWidgetAction。
// 头文件
#ifndef MYWIDGETACTION_H
#define MYWIDGETACTION_H
#include <QWidgetAction>
#include "custWidget.h"
class MyWidgetAction : public QWidgetAction
{
public:
MyWidgetAction(QObject *parent);
protected:
QWidget *createWidget(QWidget *parent) override;
};
#endif
// 代码文件
#include "myWidgetAction.h"
MyWidgetAction::MyWidgetAction(QObject *parent)
:QWidgetAction::QWidgetAction(parent)
{
}
QWidget *MyWidgetAction::createWidget(QWidget *parent)
{
CustWidget* w = new CustWidget(parent);
return w;
}
整体逻辑很简单,就是返回 CustWidget 的实例。
然后咱们在前面 QWidgetAction 的示例上再添加一个菜单项,使用咱们刚定义的 MyWidgetAction。
MyWindow::MyWindow()
:QMainWindow((QWidget*)nullptr)
{
// 创建菜单栏
QMenuBar *menubar = this->menuBar();
// 创建菜单
QMenu *menu = menubar->addMenu("应用程序");
……
// 下面这个是自定义的
MyWidgetAction *custAct = new MyWidgetAction(menu);
menu->addAction(custAct);
}
最后,咱们来看看效果。
这效果不错吧。
好了,今天就水到这里了,有空咱们继续聊。