모든 ActiveX Qt 예제를 연구했으며 웹 브라우저의 신호와 슬롯을 수동으로 연결하는 방법을 알지 못했습니다. (GUI 편집기가 GUI가 실제로 복잡해지면 당신을 배신하는 경향이 있기 때문에, 내 경험에 의하면 실제로 장기적으로 고통스럽지 않다고 생각했기 때문에 모든 위젯을 수동으로 생성합니다.)).Qt QAxWidget - 수동으로 슬롯/신호를 설정하는 웹 브라우저
Qt의 QAxWidget/WebBrowser 예에서 모든 것이 약간의 마술로 연결되어있는 것으로 보이며 모든 신호/슬롯이 작동합니다. 나는 꽤 C++에서 경험하고 있지만
, 나는 Qt는에 아주 새로운 오전, 나의 다른 신호 작동하지만 (클릭 (같은) QPushButton을 등을 위해),이 하나 :))
를 호출하는 방법을 잘 모르겠습니다네비게이션하기 작업 (webBrowser _-> Navigate (...)이 다른 파일에서 호출 됨)에도 불구하고 작동하는 이벤트를 얻을 수 없다는 점에 유의하고 싶습니다.
나는 기본적으로 그 "그런 신호"경고의 무리 얻을 : 기본적으로
....
QObject::connect: No such signal mis::WebAxBrowser::NavigateComplete(QString) in WebAxBrowser.cpp:14
....
QObject::receivers: No such signal mis::WebAxBrowser::DownloadComplete()
QObject::receivers: No such signal mis::WebAxBrowser::DownloadComplete()
QObject::receivers: No such signal mis::WebAxBrowser::StatusTextChange(QString)
QObject::receivers: No such signal mis::WebAxBrowser::StatusTextChange(QString)
QObject::receivers: No such signal mis::WebAxBrowser::StatusTextChange(QString)
QObject::receivers: No such signal mis::WebAxBrowser::StatusTextChange(QString)
QObject::receivers: No such signal mis::WebAxBrowser::DownloadBegin()
QObject::receivers: No such signal mis::WebAxBrowser::DownloadBegin()
QObject::receivers: No such signal mis::WebAxBrowser::SetSecureLockIcon(int)
QObject::receivers: No such signal mis::WebAxBrowser::SetSecureLockIcon(int)
QObject::receivers: No such signal mis::WebAxBrowser::StatusTextChange(QString)
QObject::receivers: No such signal mis::WebAxBrowser::StatusTextChange(QString)
QObject::receivers: No such signal mis::WebAxBrowser::CommandStateChange(int,bool)
QObject::receivers: No such signal mis::WebAxBrowser::CommandStateChange(int,bool)
....
을, Qt는이 웹 브라우저 : 여기
관련 나를 모든 신호에 대한 오류/슬롯을 제공하는 코드는 다음과 같습니다
/////////////////////////////////////////////////////////////////////////////// ///
/// Header File:
namespace mis
{
class WebAxBrowser : public QAxWidget
{
Q_OBJECT
public:
WebAxBrowser(QWidget* parent = 0, Qt::WindowFlags f = 0);
virtual ~WebAxBrowser();
public slots:
void onNavigateComplete(QString url);
protected:
virtual bool translateKeyEvent(int message, int keycode) const;
};
} //namespace
//// Source File:
namespace mis
{
const QString INTERNET_EXPLORER_ACTIVE_X_UNIQUE_INDENTIFIER = "{8856F961-340A-11D0-A96B-00C04FD705A2}";
WebAxBrowser::WebAxBrowser(QWidget* parent, Qt::WindowFlags f) : QAxWidget(parent, f)
{
this->setControl(INTERNET_EXPLORER_ACTIVE_X_UNIQUE_INDENTIFIER);
connect(this,
SIGNAL(NavigateComplete(QString)),
this, SLOT(onNavigateComplete(QString))); //Am I missing something????
}
WebAxBrowser::~WebAxBrowser()
{
}
bool WebAxBrowser::translateKeyEvent(int message, int keycode) const
{
if (message >= WM_KEYFIRST && message <= WM_KEYLAST)
{
return true;
}
else
{
return QAxWidget::translateKeyEvent(message, keycode);
}
}
void WebAxBrowser::onNavigateComplete(QString url)
{
///Never gets called , what am I missing? :)
QMessageBox::information(this, "Never geets called :(", url);
}
}
/// 코드 끝
Visual C++ 2013 Qt Addon을 사용합니다. Qt는 64bit 컴퓨터에서 5.3 32bit 버전이고, Windows가 8.1이면 차이가 있습니다.
고마워요! Dushan
이상하게도 QAxWidget 클래스를 서브 클래 싱하지 않으면 즉, 직접 호출 할 때 작동합니다. –