A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FQt%2FQTableView</id>
		<title>C++/Qt/QTableView - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FQt%2FQTableView"/>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTableView&amp;action=history"/>
		<updated>2026-04-18T16:45:42Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTableView&amp;diff=1010&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTableView&amp;diff=1010&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTableView&amp;diff=1011&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTableView&amp;diff=1011&amp;oldid=prev"/>
				<updated>2010-05-25T10:24:32Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Load data to QTableView==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
Foundations of Qt Development\Chapter13\modelview\main.cpp&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;
#include &amp;lt;QTableView&amp;gt;&lt;br /&gt;
#include &amp;lt;QtSql&amp;gt;&lt;br /&gt;
void relModel()&lt;br /&gt;
{&lt;br /&gt;
  QSqlRelationalTableModel *model = new QSqlRelationalTableModel();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;setTable( &amp;quot;names&amp;quot; );&lt;br /&gt;
  model-&amp;gt;setRelation( 0, QSqlRelation( &amp;quot;salaries&amp;quot;, &amp;quot;id&amp;quot;, &amp;quot;annual&amp;quot; ) );&lt;br /&gt;
  model-&amp;gt;select();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;setHeaderData( 0, Qt::Horizontal, QObject::tr(&amp;quot;Annual Pay&amp;quot;) );&lt;br /&gt;
  model-&amp;gt;setHeaderData( 1, Qt::Horizontal, QObject::tr(&amp;quot;First Name&amp;quot;) );&lt;br /&gt;
  model-&amp;gt;setHeaderData( 2, Qt::Horizontal, QObject::tr(&amp;quot;Last Name&amp;quot;) );&lt;br /&gt;
    &lt;br /&gt;
  QTableView *view = new QTableView();&lt;br /&gt;
  view-&amp;gt;setModel( model );&lt;br /&gt;
  view-&amp;gt;show();&lt;br /&gt;
}&lt;br /&gt;
void tabModel()&lt;br /&gt;
{&lt;br /&gt;
  QSqlTableModel *model = new QSqlTableModel();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;setTable( &amp;quot;names&amp;quot; );&lt;br /&gt;
  model-&amp;gt;setFilter( &amp;quot;lastname = &amp;quot;Doe&amp;quot;&amp;quot; );&lt;br /&gt;
  model-&amp;gt;select();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;removeColumn( 0 );&lt;br /&gt;
    &lt;br /&gt;
  QTableView *view = new QTableView();&lt;br /&gt;
  view-&amp;gt;setModel( model );&lt;br /&gt;
  view-&amp;gt;show();&lt;br /&gt;
}&lt;br /&gt;
void qryModel()&lt;br /&gt;
{&lt;br /&gt;
  QSqlQueryModel *model = new QSqlQueryModel();&lt;br /&gt;
  model-&amp;gt;setQuery( &amp;quot;SELECT firstname, lastname FROM names&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  QTableView *view = new QTableView();&lt;br /&gt;
  view-&amp;gt;setModel( model );&lt;br /&gt;
  view-&amp;gt;show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main( int argc, char **argv )&lt;br /&gt;
{&lt;br /&gt;
  QApplication app( argc, argv );&lt;br /&gt;
  QSqlDatabase db = QSqlDatabase::addDatabase( &amp;quot;QSQLITE&amp;quot; );&lt;br /&gt;
  db.setDatabaseName( &amp;quot;:memory:&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  if( !db.open() )&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; db.lastError();&lt;br /&gt;
    qFatal( &amp;quot;Failed to connect.&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
    &lt;br /&gt;
  qDebug( &amp;quot;Connected!&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  QSqlQuery qry;&lt;br /&gt;
  qry.prepare( &amp;quot;CREATE TABLE IF NOT EXISTS names (id INTEGER UNIQUE PRIMARY KEY, firstname VARCHAR(30), lastname VARCHAR(30))&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
    &lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (1, &amp;quot;John&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (2, &amp;quot;Jane&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (3, &amp;quot;James&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (4, &amp;quot;Judy&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (5, &amp;quot;Richard&amp;quot;, &amp;quot;Roe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (6, &amp;quot;Jane&amp;quot;, &amp;quot;Roe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (7, &amp;quot;John&amp;quot;, &amp;quot;Noakes&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (8, &amp;quot;Donna&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (:id, :firstname, :lastname)&amp;quot; );&lt;br /&gt;
  qry.bindValue( &amp;quot;:id&amp;quot;, 9 );&lt;br /&gt;
  qry.bindValue( &amp;quot;:firstname&amp;quot;, &amp;quot;Ralph&amp;quot; );&lt;br /&gt;
  qry.bindValue( &amp;quot;:lastname&amp;quot;, &amp;quot;Roe&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;CREATE TABLE IF NOT EXISTS salaries (id INTEGER UNIQUE PRIMARY KEY, annual INTEGER)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (1, 1000)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (2, 900)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (3, 900)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (5, 1100)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (6, 1000)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (8, 1200)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (9, 1200)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  relModel();&lt;br /&gt;
  tabModel();&lt;br /&gt;
  qryModel();&lt;br /&gt;
  &lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==QVariant model for QTableView==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Foundations of Qt Development\Chapter05\mulmodel\main.cpp&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;
#include &amp;lt;QTableView&amp;gt;&lt;br /&gt;
#include &amp;quot;mulmodel.h&amp;quot;&lt;br /&gt;
int main( int argc, char **argv )&lt;br /&gt;
{&lt;br /&gt;
  QApplication app( argc, argv );&lt;br /&gt;
  MulModel model( 12, 12 );&lt;br /&gt;
  &lt;br /&gt;
  QTableView table;&lt;br /&gt;
  table.setModel( &amp;amp;model );&lt;br /&gt;
  &lt;br /&gt;
  table.show();&lt;br /&gt;
  &lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Foundations of Qt Development\Chapter05\mulmodel\mulmodel.cpp&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;quot;mulmodel.h&amp;quot;&lt;br /&gt;
MulModel::MulModel( int rows, int columns, QObject *parent ) : QAbstractTableModel( parent )&lt;br /&gt;
{&lt;br /&gt;
  m_rows = rows;&lt;br /&gt;
  m_columns = columns;&lt;br /&gt;
}&lt;br /&gt;
int MulModel::rowCount( const QModelIndex &amp;amp;parent ) const&lt;br /&gt;
{&lt;br /&gt;
  return m_rows;&lt;br /&gt;
}&lt;br /&gt;
int MulModel::columnCount( const QModelIndex &amp;amp;parent ) const&lt;br /&gt;
{&lt;br /&gt;
  return m_columns;&lt;br /&gt;
}&lt;br /&gt;
Qt::ItemFlags MulModel::flags( const QModelIndex &amp;amp;index ) const&lt;br /&gt;
{&lt;br /&gt;
  return Qt::ItemIsSelectable | Qt::ItemIsEnabled;&lt;br /&gt;
}&lt;br /&gt;
QVariant MulModel::data( const QModelIndex &amp;amp;index, int role ) const&lt;br /&gt;
{&lt;br /&gt;
  switch( role )&lt;br /&gt;
  {&lt;br /&gt;
  case Qt::DisplayRole:&lt;br /&gt;
    return (index.row()+1) * (index.column()+1);&lt;br /&gt;
  &lt;br /&gt;
  case Qt::ToolTipRole:&lt;br /&gt;
    return QString( &amp;quot;%1 x %2&amp;quot; ).arg( index.row()+1 ).arg( index.column()+1 );&lt;br /&gt;
  &lt;br /&gt;
  default:&lt;br /&gt;
    return QVariant();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
QVariant MulModel::headerData( int section, Qt::Orientation orientation, int role ) const&lt;br /&gt;
{&lt;br /&gt;
  if( role != Qt::DisplayRole )&lt;br /&gt;
    return QVariant();&lt;br /&gt;
    &lt;br /&gt;
  return QString::number( section+1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Foundations of Qt Development\Chapter05\mulmodel\mulmodel.h&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#ifndef MULMODEL_H&lt;br /&gt;
#define MULMODEL_H&lt;br /&gt;
#include &amp;lt;QAbstractTableModel&amp;gt;&lt;br /&gt;
class MulModel : public QAbstractTableModel&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  MulModel( int rows, int columns, QObject *parent = 0 );&lt;br /&gt;
  &lt;br /&gt;
  Qt::ItemFlags flags( const QModelIndex &amp;amp;index ) const;&lt;br /&gt;
  QVariant data( const QModelIndex &amp;amp;index, int role = Qt::DisplayRole ) const;&lt;br /&gt;
  QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;&lt;br /&gt;
  int rowCount( const QModelIndex &amp;amp;parent = QModelIndex() ) const;&lt;br /&gt;
  int columnCount( const QModelIndex &amp;amp;parent = QModelIndex() ) const;&lt;br /&gt;
private:&lt;br /&gt;
  int m_rows, m_columns;&lt;br /&gt;
};&lt;br /&gt;
#endif // MULMODEL_H&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set header for QTableView==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
Foundations of Qt Development\Chapter13\modelview\main.cpp&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;
#include &amp;lt;QTableView&amp;gt;&lt;br /&gt;
#include &amp;lt;QtSql&amp;gt;&lt;br /&gt;
void relModel()&lt;br /&gt;
{&lt;br /&gt;
  QSqlRelationalTableModel *model = new QSqlRelationalTableModel();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;setTable( &amp;quot;names&amp;quot; );&lt;br /&gt;
  model-&amp;gt;setRelation( 0, QSqlRelation( &amp;quot;salaries&amp;quot;, &amp;quot;id&amp;quot;, &amp;quot;annual&amp;quot; ) );&lt;br /&gt;
  model-&amp;gt;select();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;setHeaderData( 0, Qt::Horizontal, QObject::tr(&amp;quot;Annual Pay&amp;quot;) );&lt;br /&gt;
  model-&amp;gt;setHeaderData( 1, Qt::Horizontal, QObject::tr(&amp;quot;First Name&amp;quot;) );&lt;br /&gt;
  model-&amp;gt;setHeaderData( 2, Qt::Horizontal, QObject::tr(&amp;quot;Last Name&amp;quot;) );&lt;br /&gt;
    &lt;br /&gt;
  QTableView *view = new QTableView();&lt;br /&gt;
  view-&amp;gt;setModel( model );&lt;br /&gt;
  view-&amp;gt;show();&lt;br /&gt;
}&lt;br /&gt;
void tabModel()&lt;br /&gt;
{&lt;br /&gt;
  QSqlTableModel *model = new QSqlTableModel();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;setTable( &amp;quot;names&amp;quot; );&lt;br /&gt;
  model-&amp;gt;setFilter( &amp;quot;lastname = &amp;quot;Doe&amp;quot;&amp;quot; );&lt;br /&gt;
  model-&amp;gt;select();&lt;br /&gt;
  &lt;br /&gt;
  model-&amp;gt;removeColumn( 0 );&lt;br /&gt;
    &lt;br /&gt;
  QTableView *view = new QTableView();&lt;br /&gt;
  view-&amp;gt;setModel( model );&lt;br /&gt;
  view-&amp;gt;show();&lt;br /&gt;
}&lt;br /&gt;
void qryModel()&lt;br /&gt;
{&lt;br /&gt;
  QSqlQueryModel *model = new QSqlQueryModel();&lt;br /&gt;
  model-&amp;gt;setQuery( &amp;quot;SELECT firstname, lastname FROM names&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  QTableView *view = new QTableView();&lt;br /&gt;
  view-&amp;gt;setModel( model );&lt;br /&gt;
  view-&amp;gt;show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main( int argc, char **argv )&lt;br /&gt;
{&lt;br /&gt;
  QApplication app( argc, argv );&lt;br /&gt;
  QSqlDatabase db = QSqlDatabase::addDatabase( &amp;quot;QSQLITE&amp;quot; );&lt;br /&gt;
  db.setDatabaseName( &amp;quot;:memory:&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  if( !db.open() )&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; db.lastError();&lt;br /&gt;
    qFatal( &amp;quot;Failed to connect.&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
    &lt;br /&gt;
  qDebug( &amp;quot;Connected!&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  QSqlQuery qry;&lt;br /&gt;
  qry.prepare( &amp;quot;CREATE TABLE IF NOT EXISTS names (id INTEGER UNIQUE PRIMARY KEY, firstname VARCHAR(30), lastname VARCHAR(30))&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
    &lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (1, &amp;quot;John&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (2, &amp;quot;Jane&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (3, &amp;quot;James&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (4, &amp;quot;Judy&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (5, &amp;quot;Richard&amp;quot;, &amp;quot;Roe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (6, &amp;quot;Jane&amp;quot;, &amp;quot;Roe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (7, &amp;quot;John&amp;quot;, &amp;quot;Noakes&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (8, &amp;quot;Donna&amp;quot;, &amp;quot;Doe&amp;quot;)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO names (id, firstname, lastname) VALUES (:id, :firstname, :lastname)&amp;quot; );&lt;br /&gt;
  qry.bindValue( &amp;quot;:id&amp;quot;, 9 );&lt;br /&gt;
  qry.bindValue( &amp;quot;:firstname&amp;quot;, &amp;quot;Ralph&amp;quot; );&lt;br /&gt;
  qry.bindValue( &amp;quot;:lastname&amp;quot;, &amp;quot;Roe&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;CREATE TABLE IF NOT EXISTS salaries (id INTEGER UNIQUE PRIMARY KEY, annual INTEGER)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (1, 1000)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (2, 900)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (3, 900)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (5, 1100)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (6, 1000)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (8, 1200)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  qry.prepare( &amp;quot;INSERT INTO salaries (id, annual) VALUES (9, 1200)&amp;quot; );&lt;br /&gt;
  qry.exec();&lt;br /&gt;
  relModel();&lt;br /&gt;
  tabModel();&lt;br /&gt;
  qryModel();&lt;br /&gt;
  &lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set model for QTableView==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
  QApplication app(argc, argv);&lt;br /&gt;
  QDirModel dirModel;&lt;br /&gt;
  QWidgetw;&lt;br /&gt;
  w.setWindowTitle(QObject::tr(&amp;quot;Four directory views using one model&amp;quot;));&lt;br /&gt;
  QGridLayout *lay = new QGridLayout(&amp;amp;w);&lt;br /&gt;
  QListView *lv =new QListView;&lt;br /&gt;
  lay-&amp;gt;addWidget(lv, 0, 0);&lt;br /&gt;
  lv-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  QListView *lvi = new QListView;&lt;br /&gt;
  lay-&amp;gt;addWidget(lvi, 0, 1);&lt;br /&gt;
  lvi-&amp;gt;setViewMode(QListView::IconMode);&lt;br /&gt;
  lvi-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  QTreeView *trv =new QTreeView;&lt;br /&gt;
  lay-&amp;gt;addWidget(trv, 1, 0);&lt;br /&gt;
  trv-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  QTableView *tav =new QTableView;&lt;br /&gt;
  tav-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  lay-&amp;gt;addWidget(tav, 1, 1);&lt;br /&gt;
  QModelIndex cwdIndex = dirModel.index(QDir::currentPath());&lt;br /&gt;
  lv-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  lvi-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  trv-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  tav-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  w.show();&lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set model for QTreeView==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
  QApplication app(argc, argv);&lt;br /&gt;
  QDirModel dirModel;&lt;br /&gt;
  QWidgetw;&lt;br /&gt;
  w.setWindowTitle(QObject::tr(&amp;quot;Four directory views using one model&amp;quot;));&lt;br /&gt;
  QGridLayout *lay = new QGridLayout(&amp;amp;w);&lt;br /&gt;
  QListView *lv =new QListView;&lt;br /&gt;
  lay-&amp;gt;addWidget(lv, 0, 0);&lt;br /&gt;
  lv-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  QListView *lvi = new QListView;&lt;br /&gt;
  lay-&amp;gt;addWidget(lvi, 0, 1);&lt;br /&gt;
  lvi-&amp;gt;setViewMode(QListView::IconMode);&lt;br /&gt;
  lvi-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  QTreeView *trv =new QTreeView;&lt;br /&gt;
  lay-&amp;gt;addWidget(trv, 1, 0);&lt;br /&gt;
  trv-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  QTableView *tav =new QTableView;&lt;br /&gt;
  tav-&amp;gt;setModel(&amp;amp;dirModel);&lt;br /&gt;
  lay-&amp;gt;addWidget(tav, 1, 1);&lt;br /&gt;
  QModelIndex cwdIndex = dirModel.index(QDir::currentPath());&lt;br /&gt;
  lv-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  lvi-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  trv-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  tav-&amp;gt;setRootIndex(cwdIndex);&lt;br /&gt;
  w.show();&lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>