#include "main.cpp":
Раскрывающийся текст
#include <QApplication>
#include "connection.h"
#include <iostream>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (!createConnection()) {
std::cerr << "Unable to open database" << std::endl;
return 1;
}
NameTableWindow namesWindow;
namesWindow.show();
return a.exec();
}
#include "PushButton.h" (класс для перехвата события от мыши)
Раскрывающийся текст
#include <QApplication>
#include <QPushButton>
#include <QMouseEvent>
class QMyPushButton : public QPushButton
{
Q_OBJECT
public:
QMyPushButton(const QString &text, QWidget *parent = 0) : QPushButton(text, parent) {}
signals:
void rClicked();
protected:
void mousePressEvent (QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
QKeyEvent *event_press = new QKeyEvent (QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
QApplication::sendEvent (QApplication::focusWidget(), event_press);
QKeyEvent *event_release = new QKeyEvent (QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier);
QApplication::sendEvent (QApplication::focusWidget(), event_release);
emit rClicked();
QWidget::mousePressEvent (event);
}
}
};
#include "widget.сpp"
Раскрывающийся текст
NameTableWindow::NameTableWindow(QWidget *parent) : QWidget(parent)
{
// Create model and load data query
namesModel = new QSqlTableModel(this);
namesModel->setTable("names");
namesModel->setEditStrategy(QSqlTableModel::OnRowChange);
// Set up the headers
namesModel->setHeaderData(0, Qt::Horizontal, tr("id"));
namesModel->setHeaderData(1, Qt::Horizontal, tr("First Name"));
namesModel->setHeaderData(2, Qt::Horizontal, tr("Surname"));
namesModel->setHeaderData(3, Qt::Horizontal, tr("address id"));
namesModel->setHeaderData(4, Qt::Horizontal, tr("Comment"));
// Load the table data
namesModel->select();
// Create the view
namesView = new QTableView(this);
namesView->setModel(namesModel);
namesView->setEditTriggers(QAbstractItemView::AnyKeyPressed
| QAbstractItemView::DoubleClicked);
// Removed - this delegate is for QSqlRelationalTableModel
//namesView->setItemDelegate(new QSqlRelationalDelegate(this));
namesView->setSelectionMode(QAbstractItemView::SingleSelection);
namesView->setSelectionBehavior(QAbstractItemView::SelectRows); // select row not cell
namesView->hideColumn(names_id);
namesView->resizeColumnsToContents();
namesView->horizontalHeader()->setStretchLastSection(true);
// Set up Label
namesLabel = new QLabel(tr("Names in Table"));
namesLabel->setBuddy(namesView);
// ============================================================
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(namesLabel);
layout->addWidget(namesView);
buttonBox = new QDialogButtonBox;
addButton = new QMyPushButton(tr("Add"));
rmButton = new QPushButton (tr("Delete"));
connect(namesView, SIGNAL(activated(QModelIndex)), namesModel, SLOT(submitAll()));
connect(rmButton, SIGNAL(clicked()), this, SLOT(remove()));
connect(addButton, SIGNAL(rClicked()), SLOT(insert() ));
connect(buttonBox, SIGNAL(accepted()), this, SLOT(close())); // SLOT(accept()));
buttonBox->addButton(rmButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(addButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(QDialogButtonBox::Ok);
layout->addWidget(buttonBox);
setLayout(layout);
setWindowTitle(tr("Names Table"));
namesView->setCurrentIndex(namesModel->index(0,0));
}
void NameTableWindow::insert()
{
int row = namesView->currentIndex().row();
if (row < 0) // no record selected - add to end
row = namesModel->rowCount();
namesModel->insertRows(row,1);
namesModel->setData(namesModel->index(row, 1), " ");
namesModel->setData(namesModel->index(row, 2), " ");
namesModel->setData(namesModel->index(row, 3), " ");
namesModel->setData(namesModel->index(row, 4), " ");
qDebug("rowCount(): %d", row);
QModelIndex index = namesModel->index(row,0);
namesView->setCurrentIndex(index);
namesView->edit(index);
namesModel->submitAll();
}
void NameTableWindow::remove()
{
int row = namesView->currentIndex().row();
namesModel->removeRow(row);
namesModel->submitAll();
}
#include "widget.h"
Раскрывающийся текст
enum { // Field names
names_id = 0,
names_firstname = 1,
names_surname = 2,
names_address_id = 3,
names_comment = 4
};
class NameTableWindow: public QWidget
{
Q_OBJECT
public:
QMyPushButton *addButton;
QPushButton *rmButton;
QSqlTableModel *namesModel;
QTableView *namesView;
QLabel *namesLabel;
QDialogButtonBox *buttonBox;
NameTableWindow(QWidget *parent = 0);
public slots:
void insert ();
void remove ();
};