gpt4 book ai didi

c++ - Qt QAxWidget - WebBrowser 手动设置插槽/信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:57 25 4
gpt4 key购买 nike

我研究了所有 ActiveX Qt 示例,但我无法弄清楚如何手动连接 Web 浏览器的信号和槽。 (我手动创建所有小部件,因为我的经验告诉我,从长远来看,这实际上没有那么痛苦,因为当 GUI 变得非常复杂时,GUI 编辑器往往会背叛你:))。

在 Qt 的 QAxWidget/WebBrowser 示例中,一切似乎都由某种魔法连接,并且所有信号/槽都有效。

虽然我在 C++ 方面非常有经验,但我对 Qt 还是很陌生,虽然我的其他信号有效(比如 QPushButton 的 clicked() 等),但我不确定如何调用这个 :) )

我还想指出导航工作( 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 会为我提供与 WebBrowser 相关的所有信号/槽的错误 :)

代码如下:

////////////////////////////////////////////////

/// 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 在 64 位机器上是 5.3 32 位版本,Windows 是 8.1,如果有什么不同的话:)

谢谢!

独山

最佳答案

来自Qt 5.6 QAxWidget documentation :

警告:您可以子类化 QAxWidget,但您不能在子类中使用 Q_OBJECT 宏(生成的 moc 文件将无法编译),因此您不能添加更多的信号、槽或属性。此限制是由于在运行时生成的元对象信息。要解决此问题,请将 QAxWidget 聚合为 QObject 子类的成员。

关于c++ - Qt QAxWidget - WebBrowser 手动设置插槽/信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com