Хранилища Subversion qb

Редакция

Редакция 6 | Авторство | Сравнить с предыдущей | Последнее изменение | Открыть журнал | Скачать | RSS

#include <QtGui>
#include <QtSql>
#include "mainwindow.h"
#include "dbconfigdialog.h"
#include "tdpreviewdialog.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QLabel *dbLabel = new QLabel("Database");
    QComboBox *dbCombo = new QComboBox;
    dbCombo->addItem("default");
    dbCombo->setEnabled(false);
    QPushButton *dbPrefButton = new QPushButton("Config");
    QPushButton *dbConnectButton = new QPushButton("Connect");
    QHBoxLayout *dbLayout = new QHBoxLayout;
    dbLayout->addWidget(dbLabel);
    dbLayout->addWidget(dbCombo);
    dbLayout->addWidget(dbPrefButton);
    dbLayout->addWidget(dbConnectButton);

    QGroupBox *queryGroup = new QGroupBox("Query");
    queryEdit = new QTextEdit;
    QPushButton *queryExecButton = new QPushButton("Exec");
    QHBoxLayout *queryLayout = new QHBoxLayout;
    queryLayout->addWidget(queryEdit);
    queryLayout->addWidget(queryExecButton);
    queryGroup->setLayout(queryLayout);

    QGroupBox *logGroup = new QGroupBox("Log");
    logEdit = new QTextEdit;
    logEdit->setReadOnly(true);
    QHBoxLayout *logLayout = new QHBoxLayout;
    logLayout->addWidget(logEdit);
    logGroup->setLayout(logLayout);

    QGroupBox *resultGroup = new QGroupBox("Result");
    resultTable = new QTableView;
    resultModel = new QSqlQueryModel;
    QPushButton *previewButton = new QPushButton("Preview");
    QPushButton *printButton = new QPushButton("Print");
    QHBoxLayout *resultLayout = new QHBoxLayout;
    resultLayout->addWidget(resultTable);
    resultLayout->addWidget(previewButton);
    resultLayout->addWidget(printButton);
    resultGroup->setLayout(resultLayout);

    QWidget *mainWidget = new QWidget;
    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(dbLayout);
    mainLayout->addWidget(queryGroup);
    mainLayout->addWidget(logGroup);
    mainLayout->addWidget(resultGroup);

    mainWidget->setLayout(mainLayout);
    setCentralWidget(mainWidget);

    connect(queryExecButton,SIGNAL(clicked()),this,SLOT(queryExec()));
    connect(dbPrefButton, SIGNAL(clicked()),this,SLOT(settingsDB()));
    connect(dbConnectButton, SIGNAL(clicked()),this,SLOT(connectDB()));
    connect(previewButton, SIGNAL(clicked()), this, SLOT(on_previewPushButton_clicked()));
    connect(printButton, SIGNAL(clicked()), this, SLOT(on_printPushButton_clicked()));
    statusBar()->showMessage(tr("Ready"));
}

MainWindow::~MainWindow()
{

}

void MainWindow::queryExec()
{
    statusBar()->showMessage("SQL process...");
    resultModel->setQuery(queryEdit->toPlainText());
    resultTable->setModel(resultModel);
    resultTable->show();

    if(resultModel->lastError().isValid())
        logEdit->insertPlainText(resultModel->lastError().text());
        else logEdit->insertPlainText("No error.");
    logEdit->insertPlainText("\n");
    statusBar()->showMessage("Ready");
}

void MainWindow::settingsDB()
{
    DbConfigDialog *dbc = new DbConfigDialog();
    dbc->exec();
}

void MainWindow::connectDB()
{
    QSettings settings;

    QSqlDatabase db = QSqlDatabase::addDatabase(settings.value("DB/driver").toString());
    db.setDatabaseName(settings.value("DB/database").toString());
    if (!db.open())
        QMessageBox::critical(this, tr("Connection error"), tr("Can't open database\n%1").arg(db.lastError().text()), QMessageBox::Ok);
    else
        QMessageBox::information(this,tr("Connection complete"), tr("Connection complete!"),QMessageBox::Ok);
}

void MainWindow::on_previewPushButton_clicked()
{
        TDPreviewDialog *dialog = new TDPreviewDialog(resultTable,new QPrinter(QPrinter::HighResolution),this);
        //dialog->setHeaderText(queryEdit->toPlainText());
        dialog->exec();
        delete dialog;
}

void MainWindow::on_printPushButton_clicked()
{
        TDPreviewDialog *dialog = new TDPreviewDialog(resultTable,new QPrinter(QPrinter::HighResolution),this);
        dialog->print();
        delete dialog;
}