Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. create table person (id int primary key, firstname varchar(20), lastname varchar(20), status int)
  2.  
  3. #include <QSqlQueryModel>
  4. #include <QColor>
  5. #include <QBrush>
  6. #include <QSqlQuery>
  7.  
  8. class MyModel : public QSqlQueryModel
  9. {
  10. public:
  11.  
  12. // Константы, хранящие нужные индексы колонок
  13. enum { kIdColumn = 0 /* индекс колонки с id */, kStatusColumn = 3 /* индекс колонки со статусом */};
  14.  
  15. int getStatusOfRow(int rowIndex) const {
  16. return data(index(rowIndex, kStatusColumn ),Qt::EditRole).toInt();
  17. }
  18.  
  19. QVariant data(const QModelIndex &itemIndex, int role = Qt::DisplayRole) const override
  20. {
  21. if (role == Qt::BackgroundRole) {
  22. int status = getStatusOfRow(itemIndex.row());
  23.  
  24. int row = itemIndex.row();
  25.  
  26. if (status == 0 ) {
  27. return QBrush(QColor(255, 255, 0));
  28. }
  29.  
  30. } else if (role == Qt::DisplayRole) {
  31. if (itemIndex.column() == kStatusColumn) {
  32. int status = getStatusOfRow(itemIndex.row());
  33. return status ? "Verified" : "Unverified";
  34. }
  35.  
  36. }
  37. return QSqlQueryModel::data(itemIndex, role);
  38. }
  39.  
  40. bool setStatus(int personId, int status) {
  41. QSqlQuery query;
  42. query.prepare("update person set status = ? where id = ?");
  43. query.addBindValue(status);
  44. query.addBindValue(personId);
  45. return query.exec();
  46. }
  47. };
  48.  
  49. MyModel* model = new MyModel(this);
  50. model->setQuery("select * from person");
  51. model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
  52. model->setHeaderData(1, Qt::Horizontal, QObject::tr("First name"));
  53. model->setHeaderData(2, Qt::Horizontal, QObject::tr("Last name"));
  54. model->setHeaderData(2, Qt::Horizontal, QObject::tr("Status"));
  55. QTableView *view = new QTableView(parent);
  56. view->setModel(model);
  57. view->setSelectionBehavior(QAbstractItemView::SelectRows);
  58.  
  59. void MainWindow::pushButtonClick() {
  60. QModelIndexList list = view->selectionModel()->selectedRows();
  61. if (!list.empty()) {
  62. int rowIndex = list.at(0).row();
  63. int personId = model->data(model->index(rowIndex, MyModel::kIdColumn)).toInt();
  64. int statusId = model->getStatusOfRow(rowIndex);
  65. if (statusId == 0) {
  66. model->setStatus(personId, 1);
  67. refreshModel(model);
  68. }
  69. }
  70. }
  71.  
  72. void MainWindow::refreshModel(QSqlQueryModel *model) {
  73. model->setQuery("select * from person");
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement