• 6309阅读
  • 1回复

QStringList 在下面的程序中怎么读回的? [复制链接]

上一主题 下一主题
离线glietstone
 

只看楼主 倒序阅读 楼主  发表于: 2010-06-20
关键词: QStringList
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();
}


离线dbzhang800

只看该作者 1楼 发表于: 2010-06-21
书中只是说为你提供了这种功能,你需要的话可以用。但这个例子并没演示该功能
快速回复
限100 字节
 
上一个 下一个