Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /************************/
- /**** mainwindow.h ****/
- /************************/
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- #include <QSqlDatabase>
- class QFileDialog;
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
- private:
- QAction *newFileAction;
- QAction *openFileAction;
- QAction *quitAction;
- QMenuBar *menuBar;
- QMenu *fileMenu;
- QFileDialog *fileDialog;
- const QStringList fileFilters { "SQLite3 files (*.sqlite)",
- "Any files (*)"};
- private slots:
- void newFile();
- void openFile();
- };
- #endif // MAINWINDOW_H
- /************************/
- /*** mainwindow.cpp ***/
- /************************/
- #include <QMenuBar>
- #include <QSqlQuery>
- #include <QFileDialog>
- #include <QUuid>
- #include "mainwindow.h"
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- {
- setWindowTitle( "database" );
- setMinimumSize( 800, 600 );
- newFileAction = new QAction( "&New", this );
- openFileAction = new QAction( "&Open", this );
- quitAction = new QAction( "&Quit", this );
- menuBar = new QMenuBar();
- setMenuBar( menuBar );
- fileMenu = menuBar->addMenu( "&File" );
- fileMenu->addAction( newFileAction );
- fileMenu->addAction( openFileAction );
- fileMenu->addAction( quitAction );
- connect( newFileAction, &QAction::triggered, this, &MainWindow::newFile );
- connect( openFileAction, &QAction::triggered, this, &MainWindow::openFile );
- connect( quitAction, &QAction::triggered, this, &MainWindow::close );
- fileDialog = new QFileDialog( this );
- fileDialog->setWindowModality( Qt::WindowModal );
- fileDialog->setFileMode( QFileDialog::AnyFile );
- //dialog->setOption( QFileDialog::DontUseNativeDialog );
- fileDialog->setDefaultSuffix( "sqlite" );
- fileDialog->setNameFilters( fileFilters );
- }
- MainWindow::~MainWindow() {}
- void MainWindow::newFile()
- {
- fileDialog->setAcceptMode(QFileDialog::AcceptSave);
- if ( fileDialog->exec() == QDialog::Accepted )
- {
- QString dbName = fileDialog->selectedFiles().constFirst();
- QSqlDatabase db = QSqlDatabase::database();
- db.setDatabaseName( dbName );
- if ( db.open() )
- {
- QSqlQuery query;
- query.exec( "CREATE TABLE example (id TEXT PRIMARY KEY)" );
- QString q = "INSERT INTO example (id) VALUES('" +
- QUuid::createUuid().toString() +
- "')";
- //qDebug() << q;
- query.exec( q );
- qDebug() << "New Database: " << dbName;
- query.exec( "SELECT * FROM example" );
- while (query.next()) {
- qDebug() << query.value(0).toString();
- }
- }
- }
- }
- void MainWindow::openFile()
- {
- fileDialog->setWindowTitle( "Open file" );
- fileDialog->setAcceptMode( QFileDialog::AcceptOpen );
- if ( fileDialog->exec() == QDialog::Accepted )
- {
- QString dbName = fileDialog->selectedFiles().constFirst();
- QSqlDatabase db = QSqlDatabase::database();
- db.setDatabaseName( dbName );
- if ( db.open() )
- {
- QSqlQuery query;
- QString q = "INSERT INTO example (id) VALUES('" +
- QUuid::createUuid().toString() +
- "')";
- query.exec( q );
- qDebug() << "Database: " << dbName;
- query.exec( "SELECT * FROM example" );
- while (query.next()) {
- qDebug() << query.value(0).toString();
- }
- }
- }
- }
- /************************/
- /****** main.cpp ******/
- /************************/
- #include "mainwindow.h"
- #include <QApplication>
- #include <QSqlDatabase>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
- MainWindow w;
- w.show();
- return a.exec();
- }
- /************************/
- /**** CMakeLists.txt ****/
- /************************/
- cmake_minimum_required(VERSION 3.16)
- project(db VERSION 0.1 LANGUAGES CXX)
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
- find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
- set(PROJECT_SOURCES
- main.cpp
- mainwindow.cpp
- mainwindow.h
- )
- if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
- qt_add_executable(db
- MANUAL_FINALIZATION
- ${PROJECT_SOURCES}
- )
- # Define target properties for Android with Qt 6 as:
- # set_property(TARGET db APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
- # ${CMAKE_CURRENT_SOURCE_DIR}/android)
- # For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
- else()
- if(ANDROID)
- add_library(db SHARED
- ${PROJECT_SOURCES}
- )
- # Define properties for Android with Qt 5 after find_package() calls as:
- # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
- else()
- add_executable(db
- ${PROJECT_SOURCES}
- )
- endif()
- endif()
- target_link_libraries(db PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
- Qt${QT_VERSION_MAJOR}::Sql)
- # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
- # If you are developing for iOS or macOS you should consider setting an
- # explicit, fixed bundle identifier manually though.
- if(${QT_VERSION} VERSION_LESS 6.1.0)
- set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.db)
- endif()
- set_target_properties(db PROPERTIES
- ${BUNDLE_ID_OPTION}
- MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
- MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
- MACOSX_BUNDLE TRUE
- WIN32_EXECUTABLE TRUE
- )
- include(GNUInstallDirs)
- install(TARGETS db
- BUNDLE DESTINATION .
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- )
- if(QT_VERSION_MAJOR EQUAL 6)
- qt_finalize_executable(db)
- endif()
Add Comment
Please, Sign In to add comment