c++ GUI QT4 编程第二版 10.2节的例子,书上说,当关闭对话框的时候,leaders()函数提供一种读回这些被编辑的字符串的方式。
但是我不明白leaders()函数是被哪个函数调用的,其中的机制是什么?
代码如下:
//////////////////////////////////////////////////////////////////////////////////////
//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
/////////////////////////////////////////////////////////////////////////////////////////////
//teamleadersdialog.cpp文件
#include <QtGui>
#include "teamleadersdialog.h"
TeamLeadersDialog::TeamLeadersDialog(const QStringList &leaders,
QWidget *parent)
: QDialog(parent)
{
model = new QStringListModel(this);
model->setStringList(leaders);
listView = new QListView;
listView->setModel(model);
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()));
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(listView);
mainLayout->addWidget(buttonBox);
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()
{
model->removeRows(listView->currentIndex().row(), 1);
}
/////////////////////////////////////////////////////////////////////////////////////
//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();
}