首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT5.11,QWidget和创建一个窗口并连接到信号

QT5.11,QWidget和创建一个窗口并连接到信号
EN

Stack Overflow用户
提问于 2018-10-25 15:50:26
回答 1查看 358关注 0票数 0

我使用以下方法动态创建新窗口:

代码语言:javascript
复制
QWidget* pobjWin = new QWidget();    
pobjNode->setWidget(pobjWin);
pobjWin->resize(intWidth, intHeight);
pobjWin->move(intX, intY);

这是可行的,在我的应用程序中我有3个窗口,我想连接到各种信号,根据在线文档是:

代码语言:javascript
复制
activeChanged
contentOrientationChanged
focusObjectChanged
...

在我的应用程序中,作为一个例子,我用以下方法连接到这些信号:

代码语言:javascript
复制
QObject::connect(pobjWin, SIGNAL(activeChanged(void))
                ,pobjSubNode
                ,SLOT(windowSlotActiveChanged(void)));

指针'pobjSubNode‘指向一个类,该类为我所连接的每个信号定义了槽。

当我运行这个并执行连接时,我得到:

代码语言:javascript
复制
2018-10-25 16:26:39.550030+0100 XMLMPAM[2048:219099] QObject::connect: No such signal QWidget::activeChanged(void) in ../XMLMPAM/clsMainWnd.cpp:733

我认为问题是因为pobjWin指向的是一个QWidget而不是一个QWindow,但是我找不到一个这样创建窗口的例子。

使用新的连接方法进行编辑:

代码语言:javascript
复制
   QObject::connect(pobjWin, &QWindow::activeChanged
                   ,pobjSubNode, &clsXMLnode::windowSlotActiveChanged);

activeChanged和windowSlotActiveChanged的原型是相同的。但是,当我用这个实现构建时,我得到:

代码语言:javascript
复制
/Users/simonplatten/XMLMPAM/clsMainWnd.cpp:733: error: no matching function for call to 'connect'
                QObject::connect(pobjWin, &QWindow::activeChanged
                ^~~~~~~~~~~~~~~~

Edit2我已将连接更改为:

代码语言:javascript
复制
QObject::connect(pobjWin->windowHandle(), &QWindow::activeChanged
                                ,pobjSubNode, &clsXMLnode::windowSlotActiveChanged);

现在我明白了:

代码语言:javascript
复制
2018-10-25 17:37:22.299066+0100 XMLMPAM[2930:423194] QObject::connect: invalid null parameter

刚刚分配了:

代码语言:javascript
复制
QWindow* pobjW2 = pobjWin->windowHandle();

我可以在调试器中看到pobjW2是NULL,这解释了错误。

改变线路:

代码语言:javascript
复制
QWidget* pobjWin = new QWidget(); 

至:

代码语言:javascript
复制
QWindow* pobjWin = new QWindow();

修复了连接问题,一旦我修复了所有使用QWindow版本而不是QWidget版本的方法,但是现在我没有任何可见的windows...investigating。奇怪的是,QWindow中的方法与在QWidget中执行完全相同工作的方法有不同的名称。

在修复问题后编辑3,并在创建连接之前帮助纠正连接并插入对showNormal的调用。代码与最初发布的相同,在任何连接之前调用pobjWin->showNormal。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-25 17:11:05

好的,我感谢eylanesc的输入,谢谢。

我不得不给以下人打电话:

代码语言:javascript
复制
pobjWin->showNormal();

在尝试信号/时隙连接之前,信号和时隙连接的示例现在如下所示:

代码语言:javascript
复制
QObject::connect(pobjWin->windowHandle(), &QWindow::activeChanged
                ,pobjSubNode, &clsXMLnode::windowSlotActiveChanged);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52993445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档