Results 1 to 2 of 2

Thread: Simple Widget Mapper Example with Qtableview+QSqlTableModel?!

  1. #1
    Join Date
    Nov 2010
    Posts
    142
    Thanks
    24
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Simple Widget Mapper Example with Qtableview+QSqlTableModel?!

    hi,

    I have understood the "Simple Widget Mapper Example" and I try to implement it with a basic change:

    Do you have any idea how to get the database viewed in a QtableView instead of Qlineedits?

    This is what I have got so far:
    Qt Code:
    1. #include <QtSql/QSqlTableModel>
    2. #include <QtSql/QSqlRelationalDelegate>
    3. #include <QtSql/QSqlRecord>
    4.  
    5. #include <QPushButton>
    6.  
    7. MyDialog::MyDialog(int id, QWidget *parent)
    8. : QDialog(parent)
    9. {
    10. flatComboBox = new QComboBox();
    11. // ageSpinBox->setMaxCount(3);
    12. // ageSpinBox->addItem("a");
    13. // ageSpinBox->addItem("b");
    14. // ageSpinBox->addItem("c");
    15.  
    16. nameEdit = new QLineEdit();
    17. addressEdit = new QTextEdit();
    18.  
    19. //set up the model
    20. tableModel = new QSqlTableModel(this);
    21. tableModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    22. tableModel->setTable("lista");
    23. tableModel->select();
    24. tableModel->setHeaderData(0, Qt::Horizontal, tr("name"));
    25. tableModel->setHeaderData(1, Qt::Horizontal, tr("address"));
    26. tableModel->setHeaderData(2, Qt::Horizontal, tr("flat"));
    27.  
    28. //mapper
    29. mapper = new QDataWidgetMapper(this);
    30. mapper->setModel(tableModel);
    31. mapper->addMapping(nameEdit, 0);
    32. mapper->addMapping(addressEdit, 1);
    33. mapper->addMapping(flatComboBox, 2);
    34. mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
    35. mapper->toFirst();
    36.  
    37.  
    38. //set up the view
    39. myTableView = new QTableView(this);
    40. myTableView->setModel(tableModel);
    41. myTableView->resizeColumnsToContents();
    42. myTableView->setWindowTitle("pame reeee");
    43.  
    44. //a second view just to check if the database is updated
    45. QTableView *view2 = new QTableView(this);
    46. view2->setModel(tableModel);
    47. view2->setWindowTitle("Table Model (View 2)");
    48. view2->resizeColumnsToContents();
    49. //creating the first sql entry
    50. createConnection();
    51.  
    52. //just to print out some results
    53. QLineEdit* le = new QLineEdit(this);
    54.  
    55. //add new row
    56. QPushButton *newRowBtn = new QPushButton;
    57. newRowBtn->setText("add new row");
    58. connect(newRowBtn,SIGNAL(clicked()),this,SLOT(addNewRow()));
    59.  
    60. vboxlayout = new QVBoxLayout(this);
    61. vboxlayout->addWidget(myTableView);
    62. vboxlayout->addWidget(view2);
    63. vboxlayout->addWidget(new QLabel("print info..."));
    64. vboxlayout->addWidget(le);
    65. vboxlayout->addWidget(newRowBtn);
    66. setLayout(vboxlayout);
    67. }
    68.  
    69. MyDialog::~MyDialog()
    70. {
    71. }
    72. bool MyDialog::createConnection()
    73. {
    74. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    75. db.setDatabaseName(":memory:");
    76. if (!db.open()) {
    77. QMessageBox::critical(0, qApp->tr("Cannot open database"),
    78. qApp->tr("Unable to establish a database connection.\n"
    79. "This example needs SQLite support. Please read "
    80. "the Qt SQL driver documentation for information how "
    81. "to build it.\n\n"
    82. "Click Cancel to exit."), QMessageBox::Cancel);
    83. return false;
    84. }
    85. QSqlQuery query;
    86. query.exec("create table lista (name varchar(20) primary key, "
    87. "address varchar(20), flat int)");
    88. query.exec("insert into lista values( 'john smith', '13,oxford str',3)");
    89. return true;
    90. }
    91. void MyDialog::addNewRow()
    92. {
    93. QModelIndex index;
    94. int row = tableModel->rowCount();
    95. tableModel->insertRow(row);
    96. index = tableModel->index(row, 0);
    97. myTableView->setCurrentIndex(index);
    98. myTableView->edit(index);
    99. }
    To copy to clipboard, switch view to plain text mode 
    Last edited by fatecasino; 28th February 2011 at 17:09.

  2. #2
    Join Date
    Feb 2008
    Posts
    491
    Thanks
    12
    Thanked 142 Times in 135 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11

    Default Re: Simple Widget Mapper Example with Qtableview+QSqlTableModel?!

    Try moving createConnection() to the top of your constructor.

Similar Threads

  1. delete row from QSqlTableModel in QTableView
    By pippo42 in forum Qt Programming
    Replies: 7
    Last Post: 10th September 2014, 20:20
  2. QTableView with QSqlTableModel - change widget for edit data
    By elektrrrus in forum Qt Programming
    Replies: 3
    Last Post: 24th February 2011, 16:51
  3. Replies: 2
    Last Post: 6th January 2009, 21:55
  4. QTableView and QSqlTableModel problem
    By Misenko in forum Qt Programming
    Replies: 5
    Last Post: 19th August 2008, 22:58
  5. QTableView and QSQLTableModel
    By raphaelf in forum Qt Programming
    Replies: 6
    Last Post: 4th March 2006, 19:09

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.