2013-08-23 3 views
0

У меня возникли проблемы с изготовлением пользовательских слотов в Qt. Код:Qt C++ Custom Slot

class.h файл:

public slots: 
    void resetUrl(){ 
     this->load(QUrl("http://www.google.com")); 
} 

main.cpp файл:

#include <QWebView> 
#include <QPushButton> 

QWebView *web = new QWebView(mainwindow); 
QPushButton *button = new QPushButton(mainwindow); 

web->load(QUrl("http://www.yahoo.com")); 
button->setText("Google"); 

QObject::connect(button, SIGNAL(clicked()), web, SLOT(resetUrl())); 

Это дает мне сообщение о том, нагрузка не является признанным членом. Что мне нужно изменить?

Edit: Heres полный webview.h файл:

#ifndef WEBVIEW_H 
#define WEBVIEW_H 

#include <QMainWindow> 
#include <QWebView> 


namespace Ui { 
class webview; 
} 

class webview : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit webview(QWidget *parent = 0); 
    ~webview(); 

public slots: 
    void resetUrl(){ 
     this->load(QUrl("http://www.google.com")); 
    } 

private: 
    Ui::webview *ui; 
}; 

#endif // WEBVIEW_H 
+1

Это не выглядит правильным. В каком классе определяется ваш слот? – Mat

+0

Если это все ваш код, то в файле cpp отсутствуют определения методов, и если это весь ваш файл .h, у вас нет класса вообще – mdoran3844

+0

. Это не весь мой код, я могу вставить остальные, если вам это нужно. –

ответ

0

Вы пытаетесь назвать load() метод вашего webview класса здесь:

void resetUrl(){ 
    this->load(QUrl("http://www.google.com")); 
} 

Однако, ваш класс является производным от QMainWindow:

class webview : public QMainWindow 

Как базовый класс, так и ваш производный класс действительно не имеют метода load(). Вы должны получить свой класс webview от QWebView вместо QMainWindow. В этом случае будет вызван метод базового класса «load()», и он будет работать нормально.

+0

Когда я изменил QMainWindow на QWebView в этом месте, я получил пару новых ошибок: «QMainWindow» не является прямой базой «webview» и не имеет подходящей функции для вызова «Ui :: webview :: setupUi (webview * const) –

+0

@COnnorM, вам также необходимо изменить конструктор (вызвать конструктор соответствующего базового класса). Также избавиться от 'ui', вам это не понадобится (и я даже не уверен, что у него есть QWebView). – SingerOfTheFall

+0

Удивительный, он работает сейчас :) –

Смежные вопросы