QT 的向导是基于 QWidget 形成的子类,QWizard 类和 QWizardPage 类,分别表示向导界面和具体的页面内容。前者是控制向导页面的顺序、名称等内容;后者则是对页面内容进行具体操作。
在 QT 帮助文档中,可以查阅到具体的方法属性等内容。为了实现向导,由两种方法,一种是直接以用户界面的方式添加 QWizard 界面和若干 QWizardPage 界面。另一种则是直接在一个文档内写向导、向导界面和全部的界面按钮。
需要注意的是,第二种方式在写向导和向导界面时,需要把所有内容写在一个文档里,这样才能使用向导特有的 field 相关功能。与此不同的是,利用界面方式添加向导和向导页面的方式,则因为不在同一个文档里,从而没办法全局使用 field 相关功能。
第一种方式的实现过程
- 添加 QWizard:
选择 Qt 设计师界面类->选择窗口部件->选择 QWizard - 添加 QWizardPage:
选择 Qt 设计师界面类->选择窗口部件->选择 QWizardPage - 在主界面头文件中增加相关头文件。注意,一定要添加#include 。并新建向导对象。
- 在主界面 SLOT 中添加代码:
_wizard.show();
_wizard.restart();//每次都重新启动向导
- 在向导类实现 SLOT 中添加向导页面代码:
addPage(new IntroPage);
addPage(new ClassInfoPage);
利用界面方式添加向导需要注意几件事:
- 界面和控件用指针形式声明,使用更方便。
- QWizardPage 可以在 QWizard 初始化时使用 addPage 增加,也可以在主程序声明后 QWizard 后,直接使用 addPage 增加。
第二种方式的实现代码
- 单例模式部分
#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);
}
- 向导部分
#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