全部博文(584)
分类:
2011-01-17 13:57:53
#ifndef TRACK_H
#define TRACK_H
#include
class Track
{
public:
Track(const QString &title = "", int duration = 0);
QString title;
int duration;
};
#endif // TRACK_H
#include "track.h"
Track::Track(const QString &title, int duration)
: title(title), duration(duration)
{
}
#ifndef TRACKDELEGATE_H
#define TRACKDELEGATE_H
#include
class TrackDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
TrackDelegate(int durationColumn, QObject *parent = 0);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
private slots:
void commitAndCloseEditor();
private:
int durationColumn;
};
#endif // TRACKDELEGATE_H
#include "trackdelegate.h"
TrackDelegate::TrackDelegate(int durationColumn, QObject *parent)
: QStyledItemDelegate(parent)
{
this->durationColumn = durationColumn;
}
void TrackDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.column() == durationColumn) {
int secs = index.model()->data(index, Qt::DisplayRole).toInt();
QString text = QString("%1:%2").arg(secs / 60, 2, 10, QChar('0')).arg(secs % 60, 2, 10, QChar('0'));
QTextOption o(Qt::AlignRight | Qt::AlignVCenter);
painter->drawText(option.rect, text, o);
} else {
QStyledItemDelegate::paint(painter, option, index);
}
}
QWidget *TrackDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.column() == durationColumn) {
QTimeEdit *timeEdit = new QTimeEdit(parent);
timeEdit->setDisplayFormat("mm:ss");
connect(timeEdit, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
return timeEdit;
} else {
return QStyledItemDelegate::createEditor(parent, option, index);
}
}
void TrackDelegate::commitAndCloseEditor()
{
QTimeEdit *editor = qobject_cast
emit commitData(editor);
emit closeEditor(editor);
}
void TrackDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
if (index.column() == durationColumn) {
int secs = index.model()->data(index, Qt::DisplayRole).toInt();
QTimeEdit *timeEdit = qobject_cast
timeEdit->setTime(QTime(0, secs / 60, secs % 60));
} else {
QStyledItemDelegate::setEditorData(editor, index);
}
}
void TrackDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
if (index.column() == durationColumn) {
QTimeEdit *timeEdit = qobject_cast
QTime time = timeEdit->time();
int secs = (time.minute() * 60) + time.second();
model->setData(index, secs);
} else {
QStyledItemDelegate::setModelData(editor, model, index);
}
}
#ifndef TRACKEDITOR_H
#define TRACKEDITOR_H
#include
#include "track.h"
class TrackEditor : public QDialog
{
Q_OBJECT
public:
TrackEditor(QList
#include "trackeditor.h"
#include "trackdelegate.h"
TrackEditor::TrackEditor(QList
: QDialog(parent)
{
this->tracks = tracks;
tableWidget = new QTableWidget(tracks->count(), 2);
tableWidget->setItemDelegate(new TrackDelegate(1));
tableWidget->setHorizontalHeaderLabels(QStringList() << tr("Track") << tr("Duration"));
for (int row = 0; row < tracks->count(); ++row) {
Track track = tracks->at(row);
QTableWidgetItem *item0 = new QTableWidgetItem(track.title);
tableWidget->setItem(row, 0, item0);
QTableWidgetItem *item1 = new QTableWidgetItem(QString::number(track.duration));
item1->setTextAlignment(Qt::AlignRight);
tableWidget->setItem(row, 1, item1);
}
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(tableWidget);
this->setLayout(mainLayout);
}
#include
#include "trackeditor.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QList
Track t1("Song 1", 200);
Track t2("Song 2", 150);
Track t3("Song 3", 120);
Track t4("Song 4", 210);
tracks << t1 << t2 << t3 << t4;
TrackEditor te(&tracks, NULL);
te.show();
return a.exec();
} 本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/271255