Qt Android
Добрый день) Пишу программу под Андроид. У меня есть несколько окон. Окна открывается нормально все работает нет проблем. Проблема заключается в следующем.
Первое окно у меня окно авторизации. При нажатии на кнопки обращаюсь к слоту и отправляю Логина и пароли в С++. В С++ слое я открываю MySQL БД которая на удаленном сервере (OpenServer, PHPmyAdmin)и в стороне С++ она сравнивает и при соответствии логина .... должна открыть второе окно и в нее отправить еще текст с почтой. Но она отправляет текст в 1 окно...2 окно открывается но в нее не отправляется текст. Помогите пожалуйста с этим разобраться буду очень благодарен.
#ifndef DBASE_H #define DBASE_H #include <QObject> #include <QDebug> #include <QGuiApplication> #include <QQuickView> #include <QQmlContext> #include <QDebug> #include <QtSql> #include "QtSql/QSqlDatabase" #include "QSqlQuery" class DBase: public QObject { Q_OBJECT Q_PROPERTY(QString myMail READ getSomePropertyMail WRITE setSomePropertyMail NOTIFY sendToMail) //Для обменна даными о пройденном пути Q_PROPERTY(QString myPassword READ getSomePropertyPassword WRITE setSomePropertyPassword NOTIFY sendToPassword) //Для обменна даными о времени записи трека Q_PROPERTY(QString myOpen READ getSomePropertyOpen WRITE setSomePropertyOpen NOTIFY sendToOpen) //Для отправки текстового сообщеиня в QML Q_PROPERTY(QString passw2 READ getSomePropertyPassw2 WRITE setSomePropertyPassw2 NOTIFY sendToPassw2) Q_PROPERTY(QString gender READ getSomePropertyGender WRITE setSomePropertyGender NOTIFY sendToGender) Q_PROPERTY(QString kq READ getSomePropertyKq WRITE setSomePropertyKq NOTIFY sendToKq) Q_PROPERTY(QString age READ getSomePropertyAge WRITE setSomePropertyAge NOTIFY sendToAge) Q_PROPERTY(QString name READ getSomePropertyName WRITE setSomePropertyName NOTIFY sendToName) Q_PROPERTY(QString second READ getSomePropertySecond WRITE setSomePropertySecond NOTIFY sendToSecond) Q_PROPERTY(QString anketa READ getSomePropertyAnketa WRITE setSomePropertyAnketa NOTIFY sendToAnketa) Q_PROPERTY(QString email READ getSomePropertyEmail WRITE setSomePropertyEmail NOTIFY sendToEmail) public: explicit DBase(QObject *parent = 0); QString getSomePropertyEmail()const; void setSomePropertyEmail(const QString &); QString getSomePropertyAnketa()const; void setSomePropertyAnketa(const QString &); //Для обменна даными о времени t QString getSomePropertyOpen()const; void setSomePropertyOpen(const QString &); //Для обменна даными о времени t QString getSomePropertyMail()const; //Для обменна даными о времени t void setSomePropertyMail(const QString &); //Для обменна даными о времени t QString getSomePropertyPassword()const; //Для обменна даными о расстоянии m void setSomePropertyPassword(const QString &); //Для обменна даными о расстоянии m QString getSomePropertyPassw2()const; //Для обменна даными о расстоянии m void setSomePropertyPassw2(const QString &); //Для обменна даными о расстоянии m QString getSomePropertyGender()const; //Для обменна даными о расстоянии m void setSomePropertyGender(const QString &); //Для обменна даными о расстоянии m QString getSomePropertyKq()const; //Для обменна даными о расстоянии m void setSomePropertyKq(const QString &); //Для обменна даными о расстоянии m QString getSomePropertyAge()const; //Для обменна даными о расстоянии m void setSomePropertyAge(const QString &); //Для обменна даными о расстоянии m QString getSomePropertyName()const; //Для обменна даными о расстоянии m void setSomePropertyName(const QString &); //Для обменна даными о расстоянии m QString getSomePropertySecond()const; //Для обменна даными о расстоянии m void setSomePropertySecond(const QString &); //Для обменна даными о расстоянии m signals: //Сигналы для передачи данных о переменной void sendToMail(QString); //Сигналы для передачи пути void sendToPassword(QString); //Сигналы для передачи данных о времени void sendToOpen(QString); void sendToPassw2(QString); void sendToGender(QString); void sendToKq(QString); void sendToAge(QString); void sendToName(QString); void sendToSecond(QString); void sendToAnketa(QString); void sendToEmail(QString); public slots: void resive_logpass(QString myMail, QString myPassword); void open_users(QString myMail, QString myPassword); void open_doctors(QString myMail, QString myPassword); void write_users(QString myMail, QString myPassword, QString passw2, QString gender, QString kq, QString age, QString name, QString second ); void anceta_users(QString anketa); void pro_users(); void open_db(); void create_sqlite(); void insert_sqlite(); void open_sqlite(QString email, QString name); void close_sqlite(); void select_sqlite(); void delete_sqlite(); void close_db(); void message(QString message); private: QSqlDatabase db; QSqlDatabase dbase; QSqlQuery a_query; QSqlQuery qwe; QString myMail; QString myPassword; QString id; QString email; QString passw; QString passw2; QString name; QString second; QString age; QString kq; QString gender; QString myOpen; QString anketa; QString data_time; Q_INVOKABLE QString myMessage; protected: QString user_mail; QString user_name; }; #endif // DBASE_H
#include "dbase.h" #include <QObject> #include <QDebug> #include <QTime> #include "QtSql/QSqlDatabase" #include <QtSql/QSql> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QTime> #include <QLocale> #include <QDateTime> #include <QtMath> #include "QSqlQuery" #include <QtSql> DBase::DBase(QObject *parent): QObject(parent) { } void DBase::setSomePropertyEmail(const QString &i) //Для обменна даными с переменной way { email = i; emit sendToAnketa(email); } QString DBase::getSomePropertyEmail()const //Для обменна даными с переменной way { return email; } void DBase::setSomePropertyAnketa(const QString &i) //Для обменна даными с переменной way { anketa = i; emit sendToAnketa(anketa); } QString DBase::getSomePropertyAnketa()const //Для обменна даными с переменной way { return anketa; } void DBase::setSomePropertyPassw2(const QString &i) //Для обменна даными с переменной way { passw2 = i; emit sendToMail(passw2); } QString DBase::getSomePropertyPassw2()const //Для обменна даными с переменной way { return passw2; } void DBase::setSomePropertyGender(const QString &i) //Для обменна даными с переменной way { gender = i; emit sendToMail(gender); } QString DBase::getSomePropertyGender()const //Для обменна даными с переменной way { return gender; } void DBase::setSomePropertyKq(const QString &i) //Для обменна даными с переменной way { kq = i; emit sendToMail(kq); } QString DBase::getSomePropertyKq()const //Для обменна даными с переменной way { return kq; } void DBase::setSomePropertyAge(const QString &i) //Для обменна даными с переменной way { age = i; emit sendToMail(age); } QString DBase::getSomePropertyAge()const //Для обменна даными с переменной way { return age; } void DBase::setSomePropertyName(const QString &i) //Для обменна даными с переменной way { name = i; emit sendToMail(name); } QString DBase::getSomePropertyName()const //Для обменна даными с переменной way { return name; } void DBase::setSomePropertySecond(const QString &i) //Для обменна даными с переменной way { second = i; emit sendToMail(second); } QString DBase::getSomePropertySecond()const //Для обменна даными с переменной way { return second; } void DBase::setSomePropertyMail(const QString &i) //Для обменна даными с переменной way { myMail = i; emit sendToMail(myMail); } QString DBase::getSomePropertyMail()const //Для обменна даными с переменной way { return myMail; } void DBase::setSomePropertyPassword (const QString &i) //Для обменна даными с переменной time { myPassword = i; emit sendToPassword(myPassword); } QString DBase::getSomePropertyPassword()const //Для обменна даными с переменной time { return myPassword; } void DBase::setSomePropertyOpen (const QString &i) //Для обменна даными с переменной time { myOpen = i; emit sendToPassword(myOpen); } QString DBase::getSomePropertyOpen()const //Для обменна даными с переменной time { return myOpen; } void DBase::open_users(QString myMail, QString myPassword){ myOpen = "true"; emit sendToOpen(myOpen); /* QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); //192.168.1.252 db.setPort(3306); db.setDatabaseName("test"); db.setUserName("root"); db.setPassword(""); bool ok = db.open(); if(ok == true){ } QSqlQuery query(db); query.exec("SELECT id, email, password, gender, weight, age, first_name, second_name FROM users;"); while (query.next()) { id = query.value(0).toString(); email = query.value(1).toString(); //Получаю данные из БД passw = query.value(2).toString(); kq = query.value(3).toString(); //Получаю данные из БД age = query.value(4).toString(); name = query.value(5).toString(); //Получаю данные из БД second = query.value(6).toString(); //Получаю данные из БД if((myMail==email)&&(myPassword==passw)){ qDebug()<<"id"<<id<<endl; qDebug()<<"email"<<email<<endl; qDebug()<<"password"<<passw<<endl; qDebug()<<"gender"<<gender<<endl; qDebug()<<"weight"<<kq<<endl; qDebug()<<"age"<<age<<endl; qDebug()<<"name"<<name<<endl; qDebug()<<"secname"<<second<<endl; myOpen = "true"; emit sendToOpen(myOpen); emit sendToEmail(name); emit sendToName(email); //emit sendClos(); // open_sqlite(); //insert_sqlite(); break; } else{ myOpen = "Не правильные данные"; sendToOpen(myOpen); } } close_db(); */ } void DBase::open_doctors(QString myMail, QString myPassword) { open_db(); QSqlQuery query(db); query.exec("SELECT id, login, password, first_name, second_name FROM doctors;"); while (query.next()) { id = query.value(0).toString(); email = query.value(1).toString(); //Получаю данные из БД passw = query.value(2).toString(); name = query.value(3).toString(); //Получаю данные из БД second = query.value(4).toString(); //Получаю данные из БД if((myMail==email)&&(myPassword==passw)){ qDebug()<<"id"<<id<<endl; qDebug()<<"email"<<email<<endl; qDebug()<<"password"<<passw<<endl; qDebug()<<"name"<<name<<endl; qDebug()<<"secname"<<second<<endl; myOpen = "true"; sendToOpen(myOpen); pro_users(); break; } else{ } close_db(); } qDebug()<<"NOT !!!"<<endl; myOpen = "false"; sendToOpen(myOpen); } void DBase::write_users(QString myMail, QString myPassword, QString passw2, QString gender, QString kq, QString age, QString name, QString second){ if((myMail == "")||(myPassword == "")||(gender == "")|| (kq == "") || (age =="") || (name == "") ||(second == "")){ myOpen = "Заполните все ячейки"; sendToOpen(myOpen); } else{ if(myPassword != passw2){ myOpen = "Пароль не совпадает"; sendToOpen(myOpen); } else{ open_db(); QSqlQuery query(db); query.exec("SELECT email FROM users;"); bool test = false; while (query.next()) { email = query.value(0).toString(); qDebug()<<email<<"email"<<endl; if(myMail == email){ test = true; myOpen = "Пользователь с такой почтой существует."; sendToOpen(myOpen); break; } } if(test == false){ QString str; QSqlQuery a_query; a_query.prepare("INSERT INTO users (email, password, gender, weight, age, first_name, second_name)" "VALUES (:email, :password, :gender, :weight, :age, :first_name, :second_name);"); a_query.bindValue(":email",myMail); a_query.bindValue(":password",myPassword); a_query.bindValue(":gender",gender); a_query.bindValue(":weight",kq); a_query.bindValue(":age",age); a_query.bindValue(":first_name",name); a_query.bindValue(":second_name",second); a_query.exec(); bool b = a_query.exec(str); if (!b) { qDebug() << "error3"; }else{ qDebug()<<"Send3"; } myOpen = "Аккаунт создан"; sendToOpen(myOpen); } } } close_db(); } void DBase::resive_logpass(QString myLogin, QString myPassword) { qDebug()<<myLogin<<"--"<<myPassword<<endl; } void DBase::anceta_users(QString anketa){ qDebug() << anketa <<"anketa"<<endl; qDebug() << email <<"myMail"<<endl; qDebug() << name <<"name"<<endl; QTime time = QTime::currentTime(); data_time = time.msecsSinceStartOfDay(); QString str; QSqlQuery a_query(db); a_query.prepare("INSERT INTO anket (email, rezult, name, data_time)" "VALUES (:email, :rezult, :name, :data_time);"); a_query.bindValue(":email",user_mail); a_query.bindValue(":rezult",anketa); a_query.bindValue(":name",user_name); a_query.bindValue(":name",data_time); a_query.exec(); bool b = a_query.exec(str); if (!b) { qDebug() << "error3"; }else{ qDebug()<<"Send3"; } myOpen = "Аккаунта сохранена"; sendToOpen(myOpen); } void DBase::pro_users(){ emit sendToEmail(email); emit sendToName(name); } void DBase::open_db() { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); //192.168.1.252 db.setPort(3306); db.setDatabaseName("test"); db.setUserName("root"); db.setPassword(""); bool ok = db.open(); if(ok == true){ } } void DBase::open_sqlite(QString email, QString name) { dbase = QSqlDatabase::addDatabase("QSQLITE"); //Создая обект для QSQLite dbase.setDatabaseName("vasya.sqlite"); //Создаю БД if (!dbase.open()) { //Проверяю БД qDebug() << "Error db"; }else{ qDebug()<<"Good db"; } /////////// QSqlQuery qwe; // DDL query QString str = "CREATE TABLE azaza (" "id integer PRIMARY KEY NOT NULL," "mail VARCHAR(30)," "name VARCHAR(30),);"; bool b = qwe.exec(str); //Проверка на создания if (!b) { qDebug() << "error2!"; } else{ qDebug()<<"send2"; } qDebug() << "error3"<<email<<endl;; qDebug() << "error3"<<name<<endl; qwe.prepare("INSERT INTO azaza (mail , name) VALUES (:mail , :name)"); qwe.bindValue(":mail",email); qwe.bindValue(":name",name); b = qwe.exec(); if (!b) { qDebug() << "error3"; }else{ qDebug()<<"Send3"; } } void DBase::create_sqlite(){ // DDL query } void DBase::insert_sqlite(){ } void DBase::close_sqlite(){ dbase.close(); } void DBase::delete_sqlite(){ QString str_insrt = "DELETE FROM test_2.my_ta;"; } void DBase::select_sqlite(){ QSqlQuery query(dbase); query.exec("SELECT myMaile, name FROM my_ta;"); while (query.next()) { email = query.value(0).toString(); //Получаю данные из БД name = query.value(1).toString(); //Получаю данные из БД } } void DBase::close_db() { db.close(); } void DBase::message(QString message){ myOpen = message; emit sendToOpen(myOpen); }main.cpp
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtQuick> #include <QApplicationStateChangeEvent> #include <QObject> #include <QQmlContext> #include <QQmlApplicationEngine> #include <QQuickView> #include "dbase.h" #include "QtSql/QSqlDatabase" #include "QSqlQuery" #include <QtSql/QSql> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); qmlRegisterType<DBase>("MyModule",1,0,"DBase"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QQuickView view; DBase myClass; view.rootContext()->setContextProperty("myObject",&myClass); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); /* QGuiApplication * q_application = SailfishApp :: application ( argc, argv ); QQuickView * q_view = SailfishApp :: createView ( ); qmlRegisterType<GPSCoor>("MyModule",1,0,"GPSCoor"); //Передает класс под названием GPSCorr в QML GPSCoor myClass; q_view->rootContext()->setContextProperty("myObject",&myClass); q_view->setSource ( SailfishApp :: pathTo ( "qml/GPSpy.qml" )); q_view -> showFullScreen ( ); return q_application -> exec ( ); */ }
import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.1 import MyModule 1.0 ApplicationWindow { id: applicationWindow width: 300 height: 600 visible: true title: qsTr("Med") DBase{ id:dbase_class onSendToOpen:{ var text; text = myOpen; console.log(myOpen) if(text === "true"){ mymenu.show() // applicationWindow.hide() }else{ if(text === "Не правильные данные") label.visible = text } } onSendToEmail: { label2.text = email console.log("email" + email); } onSendToName:{ label1.text = name console.log("Name = " + name); } } Rectangle{ id: rectangle2 anchors.fill: parent Rectangle { id: rectangle width: 253 height: 233 radius: 12 border.width: 2 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter TextField { id: my_Login height: 40 text: qsTr("") horizontalAlignment: Text.AlignHCenter placeholderText: "Почта" anchors.top: parent.top anchors.topMargin: 15 anchors.right: parent.right anchors.rightMargin: 15 anchors.left: parent.left anchors.leftMargin: 15 } TextField { id: my_Password height: 40 text: qsTr("") horizontalAlignment: Text.AlignHCenter placeholderText: "Пароль" anchors.top: my_Login.bottom anchors.topMargin: 20 anchors.right: parent.right anchors.left: parent.left anchors.leftMargin: 15 anchors.rightMargin: 15 echoMode: "Password" } Button { id: button height: 40 text: qsTr("Войти") anchors.top: my_Password.bottom anchors.topMargin: 15 anchors.left: parent.horizontalCenter anchors.leftMargin: 5 anchors.right: parent.right anchors.rightMargin: 15 highlighted: true visible: true onClicked: { console.log("CLICK") dbase_class.open_users(my_Login.text,my_Password.text) } } Button { id: button1 text: qsTr("Регистрация") highlighted: true anchors.right: parent.right anchors.rightMargin: 15 anchors.left: parent.left anchors.leftMargin: 15 anchors.top: button.bottom anchors.topMargin: 5 onClicked: { // Закрываем второе окно } } Button { id: helper text: qsTr("Помощь") highlighted: true anchors.right: parent.horizontalCenter anchors.rightMargin: 5 anchors.top: my_Password.bottom anchors.topMargin: 15 anchors.left: parent.left anchors.leftMargin: 15 onClicked: { // Закрываем второе окно // applicationWindow.close() } } Label { id: label width: 257 visible: false height: 20 color: "#f60404" text: qsTr("Почта или пароль не правильный") verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter anchors.right: parent.right anchors.rightMargin: 15 anchors.left: parent.left anchors.leftMargin: 15 styleColor: "#000000" wrapMode: Text.WordWrap anchors.top: my_Login.bottom anchors.topMargin: 0 font.pointSize: 10 } } Rectangle { id: rectangle1 y: 498 height: 40 color: "#2b2626" anchors.bottom: parent.bottom anchors.bottomMargin: 0 anchors.left: parent.left anchors.leftMargin: 0 anchors.right: parent.right anchors.rightMargin: 0 Label { id: label1 y: 16 color: "#ffffff" text: qsTr("Почта") anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.leftMargin: 20 } Label { id: label2 x: 259 y: 16 color: "#ffffff" text: qsTr("Имя") anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: 20 } } } Mymenu{ id:mymenu } }
import QtQuick 2.9 import QtQuick.Controls 1.4 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import MyModule 1.0 ApplicationWindow { id: windowMenu width: 300 height: 600 DBase{ id: mymyMenu onSendToEmail: { mymail.text = email } onSendToName:{ myname.text = name } } //color: "red" Rectangle { id: rectangle width: 230 height: 248 color: "#ffffff" radius: 20 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter border.width: 1 Button {//анкета id: button text: qsTr("Анкета") highlighted: true anchors.right: parent.right anchors.rightMargin: 10 anchors.left: parent.left anchors.leftMargin: 10 anchors.top: parent.top anchors.topMargin: 10 MouseArea{ anchors.fill: parent onClicked: { console.log("CLIK!") } } } Button {//Почта id: button1 text: qsTr("Написать врачу") highlighted: true anchors.right: parent.right anchors.rightMargin: 10 anchors.left: parent.left anchors.leftMargin: 10 anchors.top: button.bottom anchors.topMargin: 5 MouseArea{ anchors.fill: parent onClicked: { console.log("CLIK!") } } } Button { id: button2 text: qsTr("Найти лекарство") highlighted: true anchors.right: parent.right anchors.rightMargin: 10 anchors.left: parent.left anchors.leftMargin: 10 anchors.top: button1.bottom anchors.topMargin: 5 MouseArea{ anchors.fill: parent onClicked: { console.log("CLIK!") } } } Button { id: button3 text: qsTr("График") highlighted: true anchors.left: parent.left anchors.leftMargin: 10 anchors.right: parent.right anchors.rightMargin: 10 anchors.top: button2.bottom anchors.topMargin: 5 MouseArea{ anchors.fill: parent onClicked: { console.log("CLIK!") } } } RoundButton { id: roundButton x: 113 text: "Выход" highlighted: true anchors.horizontalCenter: parent.horizontalCenter anchors.top: button3.bottom anchors.topMargin: 10 MouseArea{ anchors.fill: parent onClicked: { console.log("CLIK!") } } } } Rectangle { id: rectangle1 y: 560 height: 40 color: "#292828" anchors.bottom: parent.bottom anchors.bottomMargin: 0 anchors.left: parent.left anchors.leftMargin: 0 anchors.right: parent.right anchors.rightMargin: 0 Label { id: myname x: 581 y: 12 color: "#ffffff" text: qsTr("Имя") anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: 15 } Label { id: mymail y: 16 color: "#ffffff" text: qsTr("Почта") anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.leftMargin: 15 } } }это все, пока что в коде dbase.cpp я отключил БД что бы открывалось у всех и по этому прописал
myOpen = "true"; emit sendToOpen(myOpen); email="qqqqqq"; emit sendToEmail(email); name="wwwwww"; emit sendToName(name);
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день!
Спасибо большое за то что ответили. Я поменял на
Начал выводить ошибку
Так, по поводу ошибок, там в main.cpp ещё одна ошибка у вас
По поводу наложения окон - это правильное поведение. В Android в QML так и делается разработка - всё в одном окне должно быть.