QT 利用向导设置多种情况的参数设

在这里插入图片描述

QT 的向导是基于 QWidget 形成的子类,QWizard 类和 QWizardPage 类,分别表示向导界面和具体的页面内容。前者是控制向导页面的顺序、名称等内容;后者则是对页面内容进行具体操作。

在 QT 帮助文档中,可以查阅到具体的方法属性等内容。为了实现向导,由两种方法,一种是直接以用户界面的方式添加 QWizard 界面和若干 QWizardPage 界面。另一种则是直接在一个文档内写向导、向导界面和全部的界面按钮。

需要注意的是,第二种方式在写向导和向导界面时,需要把所有内容写在一个文档里,这样才能使用向导特有的 field 相关功能。与此不同的是,利用界面方式添加向导和向导页面的方式,则因为不在同一个文档里,从而没办法全局使用 field 相关功能。

第一种方式的实现过程

  1. 添加 QWizard:
    选择 Qt 设计师界面类->选择窗口部件->选择 QWizard
  2. 添加 QWizardPage:
    选择 Qt 设计师界面类->选择窗口部件->选择 QWizardPage
  3. 在主界面头文件中增加相关头文件。注意,一定要添加#include 。并新建向导对象。
  4. 在主界面 SLOT 中添加代码:
    _wizard.show();
    _wizard.restart();//每次都重新启动向导
  1. 在向导类实现 SLOT 中添加向导页面代码:
    addPage(new IntroPage);
    addPage(new ClassInfoPage);

利用界面方式添加向导需要注意几件事:

  1. 界面和控件用指针形式声明,使用更方便。
  2. QWizardPage 可以在 QWizard 初始化时使用 addPage 增加,也可以在主程序声明后 QWizard 后,直接使用 addPage 增加。

第二种方式的实现代码

  1. 单例模式部分
#ifndef GLOBAL_H
#define GLOBAL_H

#include <QObject>
#include <QMutex>
#include <QMutexLocker>

class Global : public QObject
{
    Q_OBJECT
public:
    static Global *getInstance();
    void setScanModel(int value);
    int getScanModel();
signals:
    void changeModel(int value);
public slots:
private:
    Global(QObject *parent = nullptr);
    static QMutex _mutex;
    int ScanModel;
};

#endif // GLOBAL_H
#include "global.h"

static Global * _instance=nullptr;
QMutex Global::_mutex;

Global::Global(QObject *parent) : QObject(parent)
{}

Global* Global::getInstance()
{
    if(_instance==nullptr)
    {
        QMutexLocker lock(&_mutex);
        if(_instance==nullptr)
        {
            Global *pinstance=new Global();
            _instance=pinstance;
        }
    }

    return  _instance;
}

int Global::getScanModel()
{
    return ScanModel;
}

void Global::setScanModel(int value)
{
    ScanModel=value;
    emit changeModel(value);
}
  1. 向导部分
#ifndef WIZARDSCANMODEL_H
#define WIZARDSCANMODEL_H

#include <QWizard>
#include <QtDebug>
#include "global.h"
#include <QLabel>
#include <QCheckBox>
#include <QGroupBox>
#include <QLineEdit>
#include <QRadioButton>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QTableWidget>
#include <QOpenGLWidget>
#include <QLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QtDebug>

#define LaserNum 4 //定义宏定义,或者全局常量也行

class WizardScanModel : public QWizard
{
    Q_OBJECT
public:
    WizardScanModel(QWidget* parent = nullptr);
    void accept() override;
    void changeScanModel(int value);
};

class PageT:public QWizardPage
{
    Q_OBJECT
public:
    PageT(QWidget * parent = nullptr);
private:
    QLabel* ScanDurationLabel;
    QLabel* ScanIntervalLabel;
    QSpinBox * ScanDurationDaySpin;
    QSpinBox * ScanDurationHourSpin;
    QSpinBox * ScanDurationMinuteSpin;
    QSpinBox * ScanDurationSecondSpin;
    QSpinBox * ScanIntervalMinuteSpin;
    QSpinBox * ScanIntervalSecondSpin;
};

class PageXY:public QWizardPage
{
    Q_OBJECT
public:
    PageXY(QWidget *parent = nullptr);

protected:
    void initializePage() override;
private:
    QLabel* AverageFrameLabel;
    QLabel* PassageLabel;
    QLabel* FileSavePathLabel;
    QCheckBox* PassageCheck[4];
    QSpinBox* AverageFrameSpin;
    QLineEdit * FileSavePathLEdit;
};

class PageZ:public QWizardPage
{
    Q_OBJECT
public:
    PageZ(QWidget *parent = nullptr);
protected:
    void initializePage() override;
private:
    QLabel * ZAxisPointStartLabel;
    QLabel * ZAxisPointStopLabel;
    QLabel * ZAxisSlicesNumLabel;
    QLabel * ZAxisStepLabel;
    QLabel * ZAxisGotoLabel;
    QDoubleSpinBox * ZAxisPointStartDSBox;
    QDoubleSpinBox * ZAxisPointStopDSBox;
    QSpinBox * ZAxisSlicesNumSBox;
    QDoubleSpinBox * ZAxisStep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值