Как объявить отрицательное число в QTableView, используя SQlite - PullRequest
0 голосов
/ 22 января 2019

Я разрабатываю основной пользовательский интерфейс с несколькими полями.Чтобы уменьшить проблему, я создал небольшое минимальное приложение с 5 столбцами: name, image, dataDatabase, dateTime иordinNumber.

У меня есть MainWindow с QTableView, как только я щелкаю правой кнопкой мыши внутри QTableView иAddItemDialog открывается с:

1) nameLineEdit
2) ImLineEdit
3) imageLineEdit
4) dateTimeEdit
5) numLineEdit 

У меня проблема в том, что я не могу найти способ принять 5) numLineEdit через AddItemDialog , когда число отрицательное. В настоящее времяэто только сохраняет положительные числа.Как обработать это исключение?

Я прочитал официальный документ , но я не мог понять.Однако всегда из этого официального источника кажется, что отрицательное число должно интерпретироваться как значение «без ограничений».Объяснение было коротким и не дало никакого полезного небольшого примера, поэтому я все еще не уверен, как действовать.

Я включаю наиболее важные части нижеприведенного приложения в соответствующее описание процедуры, которой я следовал:

Я создал Предмет с полями item.h :

class Item
{
public:
    Item(const double dateTime,
         const QString &name = "", const QString &image = "",
         int num, const QByteArray &imagesData = QByteArray());
    QString name() const { return mName; }
    QString image() const { return mImage; }
    QByteArray imagesData() const { return mImagesData; }
    double dateTime() const { return mDateTime; }
    int num() const { return mNumberCoord; } 
private:
    QString mName;
    QString mImage;
    QByteArray mImagesData;
    double mDateTime;
    int mNumberCoord
};

и связанным с ним item.cpp

Item::Item(const double dateTime, int num,
           const QString &name, const QString &image, int num,
           const QByteArray &imagesData) : 
    mName(name),
    mImage(image),
    mImagesData(imagesData),
    mDateTime(dateTime),
    mNumberCoord(num)
{
}

Я создал таблицу database.h , которая будет содержать следующие параметры:

class dataBase : public QObject
{
    Q_OBJECT
public:
    explicit dataBase(QObject *parent = nullptr);
    bool inizializationDataBase(const QString &nameDataBase);
    bool configureDataBase();
    QString getError() const { return mError; }
    bool addItem(const Item &item);
private:
    QSqlDatabase mDatabase;
    QString mError;
};

И связанный с ним файл database.cpp - Ятолько включая самый важный фрагмент кода для этого файла:

#define CREATE_TABLE \
     " CREATE TABLE IF NOT EXISTS Fish_Table" \
     " (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" \
     ", name TEXT NOT NULL" \
     ", image TEXT NOT NULL" \
     ", dataDataBase BLOB NOT NULL" \
     ", dateTime DOUBLE NOT NULL" \
     ", num INTEGER NOT NULL)"  

dataBase::dataBase(QObject *parent) : QObject(parent)
{
}

bool dataBase::addItem(const Item &item) {
    QSqlQuery q;
    q.prepare("INSERT INTO Fish_Table (name, image, dataDatabase, dateTime, num) VALUES (?,?,?,?,?)");
    q.addBindValue(item.name());
    q.addBindValue(item.image());
    q.addBindValue(item.imagesData());
    q.addBindValue(item.dateTime());
    q.addBindValue(item.num());
    bool ok = q.exec();
    if (!ok) {
        mError = q.lastError().text();
    }
    return ok;
}

и, наконец, AddItemDialog.cpp , который содержит поля, которые я пытаюсь передать в QTableView MainWindow.

AddItemDialog.cpp

void AddItemDialog::on_buttonBox_accepted()
{
    QFile dataBase(ui->imageLineEdit->text());
    if (!dataBase.open(QIODevice::ReadOnly)) {
        QMessageBox::critical(this, "Error", dataBase.errorString());
        return;
    }
    mItem = Item(ui->dateTimeEdit->dateTime(),
                 ui->nameLineEdit->text(),
                 ui->ImLineEdit->text(),
                 ui->numLineEdit->text(),
                 dataBase.readAll());
    dataBase.close();
    accept();
}

Я ожидаю сохранить положительные или отрицательные числа в QTableView, но на данный момент я могу сохранять только положительные числа.Как обработать это исключение?

1 Ответ

0 голосов
/ 17 марта 2019

Так что ответ да, возможно обрабатывать отрицательные числа. По некоторым причинам я подумал, что SQL не смог этого сделать, но ниже приведен небольшой пример того, как обрабатывать это исключение:

#define CREATE_TABLE \
     " CREATE TABLE IF NOT EXISTS Fish_Table" \
     " (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" \
     ", name TEXT NOT NULL" \
     ", image TEXT NOT NULL" \
     ", dataDataBase BLOB NOT NULL" \
     ", dateTime DOUBLE NOT NULL" \
     ", num INTEGER NOT NULL)"  

dataBase::dataBase(QObject *parent) : QObject(parent)
{
}

bool dataBase::addItem(const Item &item) {
    QSqlQuery q;
    q.prepare("INSERT INTO Fish_Table (name, image, dataDatabase, dateTime, num) VALUES (name,descriptionOfImage,BLOB(actual image), put date&time,-200)");
    q.addBindValue(item.name());
    q.addBindValue(item.image());
    q.addBindValue(item.imagesData());
    q.addBindValue(item.dateTime());
    q.addBindValue(item.num());
    bool ok = q.exec();
    if (!ok) {
        mError = q.lastError().text();
    }
    return ok;
}

Этот также является очень ценным источником.

Если также есть необходимость превратить положительное число в отрицательное, это возможное решение:

UPDATE Table
SET field= (field * -1)
Where SIGN(field) = -1 

Также это очень полезно, если кому-то нужен код SQL для дополнительного источника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...