LINUX.ORG.RU

не работает QSqlTableModel в моем классе

 , ,


0

1

Привет всем! вот такая не понятная проблема... создал БД ...когда считываю с БД, использую модель QSqlTableModel и все эти данные отображаю в QTableView... и у меня почему то не фига не получается отобразить

создаю и считываю все в конструкторе

ModelSql::ModelSql(QWidget* parent) : QWidget(parent)
{
    setupUi(this);
    setWindowTitle("Курсовая работа");
    m_lst<<"Марка контроллера"<<"Фирма-изготовитель"<<"Ориентировочная цена"
         <<"Количество аналоговых входов"<<"Количество аналоговых выводов"
         <<"Количество дискретных входов"<<"Количество дискретных выходов";
    comboBox->addItems(m_lst);
    comboBox_2->addItems(m_lst);
    if(!createConnection()) QMessageBox::critical(this, "", "Невозможно открыть БД");

    QSqlQuery query;
    query.exec("CREATE TABLE microcontroller"
               "("
                    "'Марка контроллера'                  VARCHAR(30),"
                    "'Фирма-изготовитель'                 VARCHAR(30),"
                    "'Ориентировочная цена'               VARCHAR(30),"
                    "'Количество аналоговых входов'       VARCHAR(30),"
                    "'Количество аналоговых выводов'      VARCHAR(30),"
                    "'Количество дискретных входов'       VARCHAR(30),"
                    "'Количество дискретных выходов'      VARCHAR(30)"
               ");");
    mp_model->setTable("microcontroller");
    mp_model->select();
    mp_model->setEditStrategy(QSqlTableModel::OnFieldChange);
    tableView->setModel(mp_model);
} 

но почему то в функции main() получается отобразить данные

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ModelSql cour;

    QSqlTableModel* mp_model = new QSqlTableModel;

    mp_model->setTable("microcontroller");
    mp_model->select();
    cour.tableView->setModel(mp_model);

    cour.show();
    return a.exec();
}

почему работает в функции main() , а моем классе нет ? что я не так делаю?

  • не написал сообщения об ошибках
  • не привел полный код
  • в классе ModelSql нет создания mp_model
anonymous
()
Ответ на: комментарий от anonymous

компилятор не выдает сообщение! просто не отображает...

.h

class ModelSql : public QWidget, public Ui::Form
{
    Q_OBJECT
public:
    explicit ModelSql(QWidget* parent = nullptr);
    ~ModelSql() override;
    
public slots:
    void insert_sql();

private slots:
    void check();

private:
    QSqlTableModel* mp_model = new QSqlTableModel;
    LineEdits*      mp_line  = new LineEdits;
    QStringList     m_lst;

    static bool createConnection();
};
.cpp
ModelSql::ModelSql(QWidget* parent) : QWidget(parent)
{
    setupUi(this);
    setWindowTitle("Курсовая работа");
    m_lst<<"Марка контроллера"<<"Фирма-изготовитель"<<"Ориентировочная цена"
         <<"Количество аналоговых входов"<<"Количество аналоговых выводов"
         <<"Количество дискретных входов"<<"Количество дискретных выходов";
    comboBox->addItems(m_lst);
    comboBox_2->addItems(m_lst);
    if(!createConnection()) QMessageBox::critical(this, "", "Невозможно открыть БД");

    QSqlQuery query;
    query.exec("CREATE TABLE microcontroller"
               "("
                    "'Марка контроллера'                  VARCHAR(30),"
                    "'Фирма-изготовитель'                 VARCHAR(30),"
                    "'Ориентировочная цена'               VARCHAR(30),"
                    "'Количество аналоговых входов'       VARCHAR(30),"
                    "'Количество аналоговых выводов'      VARCHAR(30),"
                    "'Количество дискретных входов'       VARCHAR(30),"
                    "'Количество дискретных выходов'      VARCHAR(30)"
               ");");
    mp_model->setTable("microcontroller");
    mp_model->select();
    mp_model->setEditStrategy(QSqlTableModel::OnFieldChange);
    tableView->setModel(mp_model);
}

ModelSql::~ModelSql()
{ delete mp_line; }

bool ModelSql::createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("microcontroller");
    db.setUserName("september");
    db.setHostName("host");
    db.setPassword("password");
    if(!db.open()) return false;
    return true;
}

september_valentine
() автор топика

Я плохо понимаю твой вопрос. Ты создаешь пустую таблицу, а потом спрашиваешь, почему у тебя не отображаются данные?

И вообще, где проверки на ошибки? Может, у тебя query.exec () на что-то ругается?

И как ты понял, что у тебя "работает только в main"?

Если оставить в main

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ModelSql cour;

    cour.show();
    return a.exec();
}

то работать не будет?

solovey ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.