#include #include #include #include #include #include #include class Data { public: Data() { } Data( const QString & d1, const QString & d2, const QString & d3 ) : m_d1( d1 ) , m_d2( d2 ) , m_d3( d3 ) { } QString m_d1; QString m_d2; QString m_d3; }; class Model : public QAbstractTableModel { Q_OBJECT public: Model( QObject * parent = 0 ) : QAbstractTableModel( parent ) { init(); } ~Model() { } int rowCount( const QModelIndex & parent = QModelIndex() ) const { if( !parent.isValid() ) return m_data.size(); else return 0; } int columnCount( const QModelIndex & parent = QModelIndex() ) const { Q_UNUSED( parent ) return 3; } QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const { const int column = index.column(); if( role == Qt::DisplayRole ) { switch( column ) { case 0 : return m_data[ index.row() ].m_d1; case 1 : return m_data[ index.row() ].m_d2; case 2 : return m_data[ index.row() ].m_d3; default : return QVariant(); } } else return QVariant(); } Qt::ItemFlags flags( const QModelIndex & index ) const { Q_UNUSED( index ) return ( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); } QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const { if( role != Qt::DisplayRole ) return QVariant(); if( orientation == Qt::Horizontal ) { switch ( section ) { case 0 : return tr( "D1" ); case 1 : return tr( "D2" ); case 2 : return tr( "D3" ); default : return QVariant(); } } return QVariant(); } private: void init() { beginInsertRows( QModelIndex(), 0, 2 ); m_data.append( Data( "1", "2", "3" ) ); m_data.append( Data( "4", "5", "6" ) ); m_data.append( Data( "7", "8", "9" ) ); endInsertRows(); } private: QList< Data > m_data; }; class View : public QTableView { Q_OBJECT public: View( QWidget * parent = 0 ) : QTableView( parent ) , m_model( new Model( this ) ) { init(); } ~View() { } private: void init() { setModel( m_model ); verticalHeader()->hide(); setSortingEnabled( true ); setSelectionMode( QAbstractItemView::ExtendedSelection ); setSelectionBehavior( QAbstractItemView::SelectRows ); setWordWrap( true ); } private: Model * m_model; }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow( QWidget * parent = 0, Qt::WindowFlags f = 0 ) : QMainWindow( parent, f ) , m_view( new View( this ) ) { init(); } ~MainWindow() { } private: void init() { setCentralWidget( m_view ); } private: View * m_view; }; int main( int argc, char ** argv) { QApplication app( argc, argv ); MainWindow w; w.show(); return app.exec(); } #include "main.moc"