Форум программистов, компьютерный форум CyberForum.ru

Qt

Войти
Регистрация
Восстановить пароль
 
Hunterproo
0 / 0 / 0
Регистрация: 14.11.2015
Сообщений: 2
#1

Отправка сигнала из Qt в QML - C++ Qt

04.01.2017, 22:01. Просмотров 184. Ответов 1
Метки нет (Все метки)

Доброго времени суток.Возникла вот какая проблема.Нужно чтоб при отправке из QT сигнала в QML закрывалось окно авторизации и открывалось вторичное.Но почему то ничего не происходит, хотя по условию count=1 в слоте loginSlot() login.cpp заходит.В чем может быть проблема?
main.qml

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls.Material 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Window 2.0
 
ApplicationWindow {
    id:logwindow
    visible: true
        width: 540
        height: 380
        title: qsTr("Окно авторизации")
 
        Material.theme: Material.Light
        Material.primary: Material.Cyan
        Material.accent: Material.Blue
 
        signal qmlSignal()
 
 
        Connections {
               target: clogin
 
              onSendToQml: {
                       logwindow.hide();//скрывается окно авторизации
                        window.show();//появляется вторичное
               }
        }
 
 
        Column {
            spacing: 10
            anchors.centerIn: parent
 
            TextField {
                id: login
                objectName: "login"
                placeholderText: "Введите Логин"
                width: 250
 
            }
 
            TextField {
                id: password
                objectName: "password"
                placeholderText: "Введите Пароль"
                width: 250
            }
 
            Button {
                id:enter
                text: qsTr("Войти")
                width: 250
                onClicked:{
                    qmlSignal()
                   //logwindow.hide()
 
                }
 
 
            }
 
            Button {
                id: reg
                text: qsTr("Регистрация")
                width: 250
            }
 
 
        }
        Window {
            id:window
             title: qsTr("Окно вторичное")
            visible: false
                width: 540
                height: 380
        }
 
 
}
clogin.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <QSqlQuery>
#include <QObject>
#include <QVariant>
 
class CLogin : public QObject
{
    Q_OBJECT
public:
    explicit CLogin(QObject *parent = 0);
 
signals:
    void sendToQml();//сигнал для отправки в QML
public slots:
    void loginSlot();
private:
    int count;
 
};
clogin.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "clogin.h"
#include <QString>
#include <QObject>
#include <iostream>
#include <QDebug>
 
using namespace std;
 
CLogin::CLogin(QObject *parent) : QObject(parent)
{
 
}
 
void CLogin::loginSlot() {
 
//Найдем строки ввода
QObject* field1 = this->parent()->findChild<QObject*>("login");
QObject* field2 = this->parent()->findChild<QObject*>("password");
//Найдем поле вывода
 
//Считаем информацию со строк ввода через свойство text
QString str1=(field1->property("text")).toString();
QString str2=(field2->property("text")).toString();
 
 
QSqlQuery qry;
 
 
if(qry.exec("select * from clients where client_login='"+str1+"' and client_password='"+str2+"'")){
    count =0;
     while(qry.next())
     {
         count++;
     }
 
     if (count==1){
        // ("username and password is correct");
          emit sendToQml();//отправка сигнала в QML
 
     }
 
 
     if (count>1)
 
        // ("Duplicate username and password");
     if (count<1)
 
        // ("username and password is not correct");
     if(!count<1||!count>1)
     {
         //открыть окно
     }
 
 
}
 
}
main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <QQmlApplicationEngine>
#include <connect.h>
#include <clogin.h>
#include <QDebug>
#include <QQmlContext>
 
 
int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    CLogin clogin;
    QQmlContext *context = engine.rootContext();
    context->setContextProperty("clogin",&clogin);
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));
 
    QObject* root = engine.rootObjects()[0];
 
       CLogin *login= new CLogin(root);
       Connect con;
       con.open();
 
 
           QObject::connect(root, SIGNAL(qmlSignal()),
                            login, SLOT(loginSlot()));
 
 
    return app.exec();
}
 Комментарий модератора 
Ставьте теги правильно!
Правила именования тем и оформления сообщений в разделе Qt
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2017, 22:01     Отправка сигнала из Qt в QML
Посмотрите здесь:

Emit сигнала в QML - C++ Qt
Допустим у меня есть квадрат 50х50 Rectangle{ width: 100; height: 100; signal heightOverHundred(); } Как мне...

Передача сигнала из c++ кода в qml слот - C++ Qt
Добрго времени суток! Начал изучать Qml и столкнулся с пблемой передачи сигнала из С++ кода в qml объект. Recorder::Recorder(QObject...

Отправка сигнала - C++ Qt
Есть класс : class Tree:public QTreeWidget { public: Tree(); virtual void mousePressEvent(QMouseEvent *event); ...

Произвольная отправка сигнала через emit - C++ Qt
Коннект работает не корректно, после сигнала не заходит в нужную функцию помогите пожалуйста emit в классе randsim, а SLOT в классе...

Банальная отправка сигнала от окна к окну - C++ Qt
Посмотрел несколько примеров, понять не могу, что я делаю не так, что не работает. Программа простейшая, #include &lt;QDialog&gt;//window.h ...

Отправка сигнала в слот объекта без явного подключения - C++ Qt
Есть два объекта А и Б. У объекта Б есть слот incomingSlot() Нужно из объекта А послать как - то сигнал в Б, не имея в объекте А какого -...

Как скомпилировать с QML - C++ Qt
Всем привет. Скомпилировал простое приложение, а чуть посложней уже не получается. Приложение использует QML. Unknown module(s) in...

QML + Image + Android - C++ Qt
Загружать заранее расположенную в ресурсах картинку у меня получается, делаю это так: Image { id: iconImage width: 42 ...

Запуск QML приложения - C++ Qt
Здравствуйте, возникла проблема. Из QtCreator приложение прекрасно запускается и работает, но если запускать самому exe, то процесс висит,...

Qml динамическая сборка - C++ Qt
Qt 5.5 Проблема в том что когда я собираю все dll для любого проекта windeploy, при запуске exe программа запускается и висит в процессах,...

QML с++ математические действия - C++ Qt
Здравствуйте уважаемые форумчане. Начал изучать QML и решил сделать калькулятор с использованием с++. Нашел в примерах калькулятор, но...

Import QML-файла - C++ Qt
Я создал qml файл Button.qml,где описал нужную мне кнопку.Этот файл находится в папке Core,в корне проекта Button.qml import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wyn
Модератор
989 / 570 / 212
Регистрация: 14.01.2016
Сообщений: 1,885
Записей в блоге: 9
06.01.2017, 15:50     Отправка сигнала из Qt в QML #2
Возможно из-за того, что
A Window can be declared inside an Item or inside another Window; in that case the inner Window will automatically become "transient for" the outer Window
https://doc-snapshots.qt.io/qt5-5.7/...ow-window.html

Вообще в таком случае советую использовать StackView, а не городить кучу сменяющихся окон.
Yandex
Объявления
06.01.2017, 15:50     Отправка сигнала из Qt в QML
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru