Witam,
Mam następujący kod:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
#include <QtSql>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
signals:
void pewiensygnal();
private:
Ui::MainWindow *ui;
QSqlTableModel model;
QSqlDatabase db;
};
#endif // MAINWINDOW_H
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// aby pewien wyemitowany sygnal zakonczyl aplikacje
connect(this, SIGNAL(pewiensygnal()), qApp, SLOT(quit()));
// utworz katalog, w ktorym bedziemy pracowac
QString homepath(QDir::home().path());
QString app_path = homepath.append("/.studentsdb");
if(!QDir(app_path).exists())
QDir().mkdir(homepath);
QString db_path = app_path.append("/studenci.db");
// polacz sie z baza danych
db = QSqlDatabase::addDatabase("QSQLITE3");
db.setDatabaseName(db_path);
if(!db.open()) {
QMessageBox::critical(this, tr("Polaczenie z baza"), tr("Nie udalo sie polaczyc z baza danych, sprawdz uprawnienia dostepu."));
// baza SQLite powinna utworzyc sie sama, wiec wyjdz z aplikacji
emit pewiensygnal();
} else {
}
// sprawdz czy baza danych zawiera tabele, jesli nie zawiera to ja utworz
}
void MainWindow::pewiensygnal()
{
}
MainWindow::~MainWindow()
{
delete ui;
}
- Zastanawiam się w jaki sensowny sposób można zastąpić to exit(1), aby było bardziej Qt-owo?
- Z reguły w Qt używa się mechanizmu sygnał-slot. Nie ma problemu ze slotem, ponieważ obiekt aplikacji posiada domyślny slot close(). Aby go ustawić używam polecenia connect. W jaki sposób mogę wyemitować sygnał?
Na wyjściu otrzymuje takie błędy:
Multiple definition of MainWindow::pewiensygnal()