使用预定义模型 QStringListModel例子
源代码如下
Main.cpp
- #include <QApplication>
- #include "teamleadersdialog.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- //字符串数组
- QStringList leaders;
- leaders << "Stooge Viller" << "Littleface" << "B-B Eyes"
- << "Pruneface" << "Mrs. Pruneface" << "The Brow"
- << "Vitamin Flintheart" << "Flattop Sr." << "Shakey"
- << "Breathless Mahoney" << "Mumbles" << "Shoulders"
- << "Sketch Paree";
- //对话框
- TeamLeadersDialog dialog(leaders);
- dialog.show();
- return app.exec();
- }
#include <QApplication>
#include "teamleadersdialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//字符串数组
QStringList leaders;
leaders << "Stooge Viller" << "Littleface" << "B-B Eyes"
<< "Pruneface" << "Mrs. Pruneface" << "The Brow"
<< "Vitamin Flintheart" << "Flattop Sr." << "Shakey"
<< "Breathless Mahoney" << "Mumbles" << "Shoulders"
<< "Sketch Paree";
//对话框
TeamLeadersDialog dialog(leaders);
dialog.show();
return app.exec();
}
teamleadersdialog.h
- #ifndef TEAMLEADERSDIALOG_H
- #define TEAMLEADERSDIALOG_H
- #include <QDialog>
- class QDialogButtonBox;
- class QListView;
- class QStringListModel;
- class TeamLeadersDialog : public QDialog
- {
- Q_OBJECT
- public:
- //构造函数
- TeamLeadersDialog(const QStringList &leaders, QWidget *parent = 0);
- QStringList leaders() const;
- private slots:
- void insert();
- void del();
- private:
- QListView *listView;
- QDialogButtonBox *buttonBox;
- QStringListModel *model;
- };
- #endif
#ifndef TEAMLEADERSDIALOG_H
#define TEAMLEADERSDIALOG_H
#include <QDialog>
class QDialogButtonBox;
class QListView;
class QStringListModel;
class TeamLeadersDialog : public QDialog
{
Q_OBJECT
public:
//构造函数
TeamLeadersDialog(const QStringList &leaders, QWidget *parent = 0);
QStringList leaders() const;
private slots:
void insert();
void del();
private:
QListView *listView;
QDialogButtonBox *buttonBox;
QStringListModel *model;
};
#endif
teamleadersdialog.cpp
- #include <QtGui>
- #include "teamleadersdialog.h"
- TeamLeadersDialog::TeamLeadersDialog(const QStringList &leaders,
- QWidget *parent)
- : QDialog(parent)
- {
- //创建并组装一个QStringListModel
- model = new QStringListModel(this);
- model->setStringList(leaders);
- //创建一个QListView
- listView = new QListView;
- //设置模型
- listView->setModel(model);
- //设置QListView编辑触发器:通过开始输入或者双击进入编辑字符串的状态
- listView->setEditTriggers(QAbstractItemView::AnyKeyPressed
- | QAbstractItemView::DoubleClicked);
- //
- buttonBox = new QDialogButtonBox();
- QPushButton *insertButton = buttonBox->addButton(tr("&Insert"),
- QDialogButtonBox::ActionRole);
- QPushButton *deleteButton = buttonBox->addButton(tr("&Delete"),
- QDialogButtonBox::ActionRole);
- buttonBox->addButton(QDialogButtonBox::Ok);
- buttonBox->addButton(QDialogButtonBox::Cancel);
- //信号槽绑定插入、删除按钮
- connect(insertButton, SIGNAL(clicked()), this, SLOT(insert()));
- connect(deleteButton, SIGNAL(clicked()), this, SLOT(del()));
- //按钮盒的ok和Cancel事件
- connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
- connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
- //界面竖直布局listView和buttonBox
- QVBoxLayout *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(listView);
- mainLayout->addWidget(buttonBox);
- //设置当前窗口的布局为mainLayout
- setLayout(mainLayout);
- setWindowTitle(tr("Team Leaders"));
- }
- //获取当前模型中的内容
- QStringList TeamLeadersDialog::leaders() const
- {
- return model->stringList();
- }
- void TeamLeadersDialog::insert()
- {
- //从列表视图得到当前项的行数
- int row = listView->currentIndex().row();
- //在模型中插入一个新行,并且模型会自动更新列表视图
- model->insertRows(row, 1);
- //获取当前行在模型中的"模型索引"
- QModelIndex index = model->index(row);
- //设置刚刚插入的空白行为列表视图的当前索引
- listView->setCurrentIndex(index);
- //设置列表视图在当前行进入编辑状态
- listView->edit(index);
- }
- void TeamLeadersDialog::del()
- {
- //从目前行开始,共删除1行model数据,并自动更新列表视图
- model->removeRows(listView->currentIndex().row(), 1);
- }