2.2K
Item Model 类向导
假设我们希望提供一个新的类向导,来帮助我们自动生成一个数据项模型的文件。这个文件将基于如下几个数据:
- 模型类名称;
- 父类名称(可以是
QAbstractItemModel
、QAbstractListModel
或者QAbstractTableModel
中的一个); - 头文件名;
- 源代码文件名。
下面,我们就来为 Qt Creator 提供这个“数据项模型”类向导。
第一步:设计类向导界面
首先,我们需要使用 Qt Designer 设计一个简单的界面,目的是向用户搜集我们上面提到的所需要的各个数据:
这个界面被命名为 ModelNamePage.ui。
第二步:实现类向导页面
现在,我们将这个 UI 界面导入 Qt 类,从而可以获取到界面数据。首先,我们需要设计一个结构体,来保存所需数据:
struct ModelClassParameters { QString className; QString headerFile; QString sourceFile; QString baseClass; QString path; };
下一步,我们声明表示向导页的类,用于将前面我们做出的 UI 类加载进来,以便用户能够使用我们设计的界面来输入需要的内容:
#ifndef MODELNAMEPAGE_H #define MODELNAMEPAGE_H #include <QWizardPage> struct ModelClassParameters { QString className; QString headerFile; QString sourceFile; QString baseClass; QString path; }; namespace Ui { class ModelNamePage; } class ModelNamePage : public QWizardPage { Q_OBJECT public: explicit ModelNamePage(QWidget *parent = 0); ~ModelNamePage(); void setPath(const QString& path); ModelClassParameters parameters() const; private slots: void onClassNameChange(const QString & name); private: Ui::ModelNamePage *ui; QString path; }; #endif // MODELNAMEPAGE_H
构造函数和析构函数都是很简单的:
ModelNamePage::ModelNamePage(QWidget *parent) : QWizardPage(parent), ui(new Ui::ModelNamePage) { ui->setupUi(this); } ModelNamePage::~ModelNamePage() { delete ui; }
函数setPath()
用于将文件路径存储下来:
void ModelNamePage::setPath(const QString& path) { this->path = path; }
槽函数onClassNameChange()
根据用户填写的类名,自动生成对应的头文件和源代码文件的名字:
void ModelNamePage::onClassNameChange(const QString &name) { ui->headerEdit->setText(name + ".h"); ui->implEdit->setText(name + ".cpp"); }
最后, 函数parameters()
用于返回ModelClassParameters
实例,实际就是返回用户填写的数据:
ModelClassParameters ModelNamePage::parameters() const { ModelClassParameters params; params.className = ui->classNameEdit->text(); params.headerFile = ui->headerEdit->text(); params.sourceFile = ui->implEdit->text(); params.baseClass = ui->baseClassBox->currentText(); params.path = path; return params; }