From 27c1e7c84382d73234c6f064c273a01a5170a68f Mon Sep 17 00:00:00 2001 From: leichaojian Date: Tue, 25 Nov 2014 20:36:28 +0800 Subject: [PATCH] add combowidgetmapper --- Combowidgetmapper/Combowidgetmapper.pro | 20 ++ Combowidgetmapper/Combowidgetmapper.pro.user | 255 +++++++++++++++++++ Combowidgetmapper/combowidgetmapper.cpp | 102 ++++++++ Combowidgetmapper/combowidgetmapper.h | 52 ++++ Combowidgetmapper/combowidgetmapper.ui | 20 ++ Combowidgetmapper/main.cpp | 11 + 6 files changed, 460 insertions(+) create mode 100644 Combowidgetmapper/Combowidgetmapper.pro create mode 100644 Combowidgetmapper/Combowidgetmapper.pro.user create mode 100644 Combowidgetmapper/combowidgetmapper.cpp create mode 100644 Combowidgetmapper/combowidgetmapper.h create mode 100644 Combowidgetmapper/combowidgetmapper.ui create mode 100644 Combowidgetmapper/main.cpp diff --git a/Combowidgetmapper/Combowidgetmapper.pro b/Combowidgetmapper/Combowidgetmapper.pro new file mode 100644 index 0000000..00bda10 --- /dev/null +++ b/Combowidgetmapper/Combowidgetmapper.pro @@ -0,0 +1,20 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2014-11-25T20:00:13 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = Combowidgetmapper +TEMPLATE = app + + +SOURCES += main.cpp\ + combowidgetmapper.cpp + +HEADERS += combowidgetmapper.h + +FORMS += combowidgetmapper.ui diff --git a/Combowidgetmapper/Combowidgetmapper.pro.user b/Combowidgetmapper/Combowidgetmapper.pro.user new file mode 100644 index 0000000..6ea6030 --- /dev/null +++ b/Combowidgetmapper/Combowidgetmapper.pro.user @@ -0,0 +1,255 @@ + + + + + + EnvironmentId + {a8c18b7e-8020-49b9-a0ef-0165c784344f} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.3 MinGW 32bit + Desktop Qt 5.3 MinGW 32bit + qt.53.win32_mingw482_kit + 0 + 0 + 0 + + C:/Users/fzyz_sb/Desktop/build-Combowidgetmapper-Desktop_Qt_5_3_MinGW_32bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/fzyz_sb/Desktop/build-Combowidgetmapper-Desktop_Qt_5_3_MinGW_32bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + 在本地部署 + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Combowidgetmapper + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/fzyz_sb/Desktop/Combowidgetmapper/Combowidgetmapper.pro + + Combowidgetmapper.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 16 + + + Version + 16 + + diff --git a/Combowidgetmapper/combowidgetmapper.cpp b/Combowidgetmapper/combowidgetmapper.cpp new file mode 100644 index 0000000..f706936 --- /dev/null +++ b/Combowidgetmapper/combowidgetmapper.cpp @@ -0,0 +1,102 @@ +#include "combowidgetmapper.h" +#include "ui_combowidgetmapper.h" + +Combowidgetmapper::Combowidgetmapper(QWidget *parent) : + QWidget(parent), + ui(new Ui::Combowidgetmapper) +{ + ui->setupUi(this); + + setupModel(); + + nameLabel = new QLabel(tr("Na&me:")); + nameEdit = new QLineEdit(); + addressLabel = new QLabel(tr("&Address:")); + addressEdit = new QTextEdit(); + typeLabel = new QLabel(tr("&Type:")); + typeComboBox = new QComboBox(); + nextButton = new QPushButton(tr("&Next")); + previousButton = new QPushButton(tr("&Previous")); + + //设定伙伴关系--例如对nameLabel使用快捷键时候,会自动跳到nameEdit上 + nameLabel->setBuddy(nameEdit); + addressLabel->setBuddy(addressEdit); + typeLabel->setBuddy(typeComboBox); + + //typeModel为QStringListModel *,存储三个基本数据:Home,Work和Other + typeComboBox->setModel(typeModel); + + //mapper用于存储输入的数据 + mapper = new QDataWidgetMapper(this); + mapper->setModel(model); + mapper->addMapping(nameEdit, 0); + mapper->addMapping(addressEdit, 1); + //由于typeComboBox是通过模型typeModel来读取的,所以我们需要currentIndex属性来获取数据 + mapper->addMapping(typeComboBox, 2, "currentIndex"); + + //信号槽的编写 + connect(previousButton, SIGNAL(clicked()), + mapper, SLOT(toPrevious())); + connect(nextButton, SIGNAL(clicked()), + mapper, SLOT(toNext())); + connect(mapper, SIGNAL(currentIndexChanged(int)), + this, SLOT(updateButtons(int))); + + //界面布局 + QGridLayout *layout = new QGridLayout(); + layout->addWidget(nameLabel, 0, 0, 1, 1); + layout->addWidget(nameEdit, 0, 1, 1, 1); + layout->addWidget(previousButton, 0, 2, 1, 1); + layout->addWidget(addressLabel, 1, 0, 1, 1); + layout->addWidget(addressEdit, 1, 1, 2, 1); + layout->addWidget(nextButton, 1, 2, 1, 1); + layout->addWidget(typeLabel, 3, 0, 1, 1); + layout->addWidget(typeComboBox, 3, 1, 1, 1); + setLayout(layout); + + setWindowTitle(tr("Delegate Widget Mapper")); + mapper->toFirst(); +} + +Combowidgetmapper::~Combowidgetmapper() +{ + delete ui; +} + +void Combowidgetmapper::setupModel() +{ + QStringList items; + items << tr("Home") << tr("Work") << tr("Other"); + typeModel = new QStringListModel(items, this); + + //创建一个5行3列的模型 + model = new QStandardItemModel(5, 3, this); + QStringList names; + names << "Alice" << "Bob" << "Carol" << "Donald" << "Emma"; + QStringList addresses; + addresses << "123 Main Street
Market Town
" + << "PO Box 32
Mail Handling Service" + "
Service City
" + << "The Lighthouse
Remote Island
" + << "47338 Park Avenue
Big City
" + << "Research Station
Base Camp
Big Mountain
"; + + QStringList types; + types << "0" << "1" << "2" << "0" << "2"; + + //将数据分别写入模型中 + for (int row = 0; row < 5; ++row) { + QStandardItem *item = new QStandardItem(names[row]); + model->setItem(row, 0, item); + item = new QStandardItem(addresses[row]); + model->setItem(row, 1, item); + item = new QStandardItem(types[row]); + model->setItem(row, 2, item); + } +} + +void Combowidgetmapper::updateButtons(int row) +{ + previousButton->setEnabled(row > 0); + nextButton->setEnabled(row < model->rowCount() - 1); +} diff --git a/Combowidgetmapper/combowidgetmapper.h b/Combowidgetmapper/combowidgetmapper.h new file mode 100644 index 0000000..00c3883 --- /dev/null +++ b/Combowidgetmapper/combowidgetmapper.h @@ -0,0 +1,52 @@ +#ifndef COMBOWIDGETMAPPER_H +#define COMBOWIDGETMAPPER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Ui { +class Combowidgetmapper; +} + +class Combowidgetmapper : public QWidget +{ + Q_OBJECT + +public: + explicit Combowidgetmapper(QWidget *parent = 0); + ~Combowidgetmapper(); + +private slots: + //用于更新previousButton和nextButton按钮是否有效 + void updateButtons(int row); + +private: + //设定模型 + void setupModel(); + + QLabel *nameLabel; + QLabel *addressLabel; + QLabel *typeLabel; + QLineEdit *nameEdit; + QTextEdit *addressEdit; + QComboBox *typeComboBox; + QPushButton *nextButton; + QPushButton *previousButton; + + QStandardItemModel *model; + QStringListModel *typeModel; + QDataWidgetMapper *mapper; + +private: + Ui::Combowidgetmapper *ui; +}; + +#endif // COMBOWIDGETMAPPER_H diff --git a/Combowidgetmapper/combowidgetmapper.ui b/Combowidgetmapper/combowidgetmapper.ui new file mode 100644 index 0000000..0d2c9c5 --- /dev/null +++ b/Combowidgetmapper/combowidgetmapper.ui @@ -0,0 +1,20 @@ + + Combowidgetmapper + + + + 0 + 0 + 400 + 300 + + + + Combowidgetmapper + + + + + + + diff --git a/Combowidgetmapper/main.cpp b/Combowidgetmapper/main.cpp new file mode 100644 index 0000000..4a2ab3a --- /dev/null +++ b/Combowidgetmapper/main.cpp @@ -0,0 +1,11 @@ +#include "combowidgetmapper.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + Combowidgetmapper w; + w.show(); + + return a.exec(); +}