Russian Qt Forum
Ноябрь 22, 2024, 20:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Делаю vk api ошибка no such slots  (Прочитано 8634 раз)
Dzi777
Гость
« : Ноябрь 27, 2016, 23:52 »

no such slots  программа компилирует, но после изменения ссылки нечего не происходит.....
QT 5.7
api.pro
------------

QT       += core gui webenginecore webenginewidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = api
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    vkapiwin.cpp
HEADERS  +=main.cpp\
    mainwindow.h \
    vkapiwin.h
FORMS    += mainwindow.ui \
    vkapiwin.ui
-------------------------------------
main.cpp
Код:
#include "mainwindow.h"
#include <QApplication>
#include <QtWebEngineCore>
#include <QtWebEngineWidgets>
#include <QUrl>
#include <QString>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    QString token;
    QString id;
    w.show();
    return a.exec();
}
mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "string.h"
#include "vkapiwin.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_pushButton_2_clicked();

    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    vkapiwin *vkapi;
};

#endif // MAINWINDOW_H
vkapiwin.h
Код:
#ifndef VKAPIWIN_H
#define VKAPIWIN_H

#include <QWidget>

namespace Ui {
class vkapiwin;
}

class vkapiwin : public QWidget
{
    Q_OBJECT

public:
    explicit vkapiwin(QWidget *parent = 0);
    ~vkapiwin();
    Ui::vkapiwin *ui;
public slots:
    virtual void check_url(QUrl &url,QString &token,QString &id);
};

#endif // VKAPIWIN_H
main window.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "vkapiwin.h"
#include <QUrlQuery>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_2_clicked()
{
 vkapiwin *vkapi= new vkapiwin();
 vkapi->show();
 if (vkapi == NULL)
 {
     vkapi->hide();
     this->show();
 }
}

void MainWindow::on_pushButton_clicked()
{
   ............
}
vkapiwin.cpp
Код:
#include "vkapiwin.h"
#include "ui_vkapiwin.h"
#include <QUrlQuery>
#include <QSsl>
#include <QWidget>

vkapiwin::vkapiwin(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::vkapiwin)
{
    ui->setupUi(this);
    ui->preview->load(QUrl("https://oauth.vk.com/authorize?client_id=5681259&display=mobile&redirect_uri=https://oauth.vk.com/blank.html&scope=friends&response_type=token&v=5.60&state=123456"));
    connect(ui->preview,SIGNAL(urlChanged(QUrl)),this,SLOT(check_url(QUrl,token,id)));
    ui->preview->show();
}

vkapiwin::~vkapiwin()
{
    delete ui;
}
void vkapiwin::check_url(QUrl &url,QString &token,QString &id)
{
    url = url.toString().replace("#","?");
    token = QUrlQuery(url).queryItemValue("access_token");
    id = QUrlQuery(url).queryItemValue("user_id");
}
после компиляции пушит
QML debugging is enabled. Only use this in a safe environment.
QObject::connect: No such slot vkapiwin::check_url(QUrl,token,id) in ../api/vkapiwin.cpp:13
QObject::connect:  (sender name:   'preview')
QObject::connect:  (receiver name: 'vkapiwin')
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #1 : Ноябрь 28, 2016, 07:47 »

Все правильно пишет) Слот имеет не такую сигнатуру, должно быть

Код
C++ (Qt)
connect(ui->preview,SIGNAL(urlChanged(QUrl)),this,SLOT(check_url(QUrl,QString,QString)));
 
Записан
Dzi777
Гость
« Ответ #2 : Ноябрь 28, 2016, 10:38 »

Все правильно пишет) Слот имеет не такую сигнатуру, должно быть

Код
C++ (Qt)
connect(ui->preview,SIGNAL(urlChanged(QUrl)),this,SLOT(check_url(QUrl,QString,QString)));
 
Не помогло......Есть еще идеи?Но слот я неправильно подключал.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Ноябрь 28, 2016, 11:36 »

И добавьте в поля класса token и id

Код
C++ (Qt)
connect(ui->preview,SIGNAL(urlChanged(QUrl)),this,SLOT(check_url(QUrl)));
 
и
 
void vkapiwin::check_url(QUrl url) {
   url = url.toString().replace("#","?");
   this->token = QUrlQuery(url).queryItemValue("access_token");
   this->id = QUrlQuery(url).queryItemValue("user_id");
}
 
Записан

Dzi777
Гость
« Ответ #4 : Ноябрь 28, 2016, 18:55 »

И добавьте в поля класса token и id

Код
C++ (Qt)
connect(ui->preview,SIGNAL(urlChanged(QUrl)),this,SLOT(check_url(QUrl)));
 
и
 
void vkapiwin::check_url(QUrl url) {
   url = url.toString().replace("#","?");
   this->token = QUrlQuery(url).queryItemValue("access_token");
   this->id = QUrlQuery(url).queryItemValue("user_id");
}
 
Не помогло.......(и так переменные записать не получилось Грустный )
« Последнее редактирование: Ноябрь 28, 2016, 18:57 от Dzi777 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Ноябрь 29, 2016, 08:21 »

А такая замена в лоб и не поможет -- нужно код еще закончить -- в заголовочнике поменять описание функции check_url, добавить поля token и id, подкорректировать (наверное) алгоритм использования vkapiwin, например после того как функция будет вызвана и заполнит те поля еще и отправляем сигнал, мол данные получены.
Записан

Dzi777
Гость
« Ответ #6 : Ноябрь 29, 2016, 10:02 »

А такая замена в лоб и не поможет -- нужно код еще закончить -- в заголовочнике поменять описание функции check_url, добавить поля token и id, подкорректировать (наверное) алгоритм использования vkapiwin, например после того как функция будет вызвана и заполнит те поля еще и отправляем сигнал, мол данные получены.
Я все исправил в заголовочном файле(изменил описание функции check_url и добавил token и id в класс), но это не помогло.
Программа не хочет брать данные.
Код:
void vkapiwin::check_url(QUrl &url)
{
    QString url1 = url.toString().replace("#","?");
    this->token = QUrlQuery(url1).queryItemValue("access_token");
    this->id = QUrlQuery(url1).queryItemValue("user_id");
}
попробовал так тоже не помогло.....
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Ноябрь 29, 2016, 12:41 »

а ссылка-то хоть правильная приходит? добавь печать / посмотри через дебаггер
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Dzi777
Гость
« Ответ #8 : Ноябрь 29, 2016, 22:58 »

а ссылка-то хоть правильная приходит? добавь печать / посмотри через дебаггер
Ссылка вообще не приходит. Хотя вроде должна приходить.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Ноябрь 30, 2016, 16:09 »

попробуй прописать коннект до вызова ui->preview->load()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Dzi777
Гость
« Ответ #10 : Ноябрь 30, 2016, 20:12 »

попробуй прописать коннект до вызова ui->preview->load()
]по моему это не имеет смысла....(но  я попробовал (не помогло)).
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Декабрь 01, 2016, 01:36 »

у меня все работает в обоих вариантах, Qt 5.6.2, Mac OS X 10.11:
Код
C++ (Qt)
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
#include <QWebEngineView>
 
class A : public QObject
{
   Q_OBJECT
 
public slots:
   void printUrl(const QUrl &url) { qDebug() << "from A:" << url; }
};
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QWebEngineView w;
   A a;
   QObject::connect(&w, SIGNAL(urlChanged(QUrl)), &a, SLOT(printUrl(QUrl)));
   QObject::connect(&w, &QWebEngineView::urlChanged, [](const QUrl &url){ qDebug() << "from lambda:" << url; });
   w.load(QUrl("https://oauth.vk.com/authorize?client_id=5681259&display=mobile&redirect_uri=https://oauth.vk.com/blank.html&scope=friends&response_type=token&v=5.60&state=123456"));
   w.show();
 
   return app.exec();
}
 
#include "main.moc"

вывод:
Цитировать
« Последнее редактирование: Декабрь 01, 2016, 01:39 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Dzi777
Гость
« Ответ #12 : Декабрь 01, 2016, 09:45 »

у меня все работает в обоих вариантах, Qt 5.6.2, Mac OS X 10.11:
Код
C++ (Qt)
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
#include <QWebEngineView>
 
class A : public QObject
{
   Q_OBJECT
 
public slots:
   void printUrl(const QUrl &url) { qDebug() << "from A:" << url; }
};
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QWebEngineView w;
   A a;
   QObject::connect(&w, SIGNAL(urlChanged(QUrl)), &a, SLOT(printUrl(QUrl)));
   QObject::connect(&w, &QWebEngineView::urlChanged, [](const QUrl &url){ qDebug() << "from lambda:" << url; });
   w.load(QUrl("https://oauth.vk.com/authorize?client_id=5681259&display=mobile&redirect_uri=https://oauth.vk.com/blank.html&scope=friends&response_type=token&v=5.60&state=123456"));
   w.show();
 
   return app.exec();
}
 
#include "main.moc"

вывод:
Цитировать
У меня проблема в том, что он не получает ссылку в connect"е.(Или он его неправильно обрабатывает(что мало вероятно)).
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Декабрь 01, 2016, 17:49 »

ну этот тестовый пример сработал у тебя?

выкладывай полный проект, посмотрим.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.152 секунд. Запросов: 23.