我使用以下方法动态创建新窗口:
QWidget* pobjWin = new QWidget();
pobjNode->setWidget(pobjWin);
pobjWin->resize(intWidth, intHeight);
pobjWin->move(intX, intY);这是可行的,在我的应用程序中我有3个窗口,我想连接到各种信号,根据在线文档是:
activeChanged
contentOrientationChanged
focusObjectChanged
...在我的应用程序中,作为一个例子,我用以下方法连接到这些信号:
QObject::connect(pobjWin, SIGNAL(activeChanged(void))
,pobjSubNode
,SLOT(windowSlotActiveChanged(void)));指针'pobjSubNode‘指向一个类,该类为我所连接的每个信号定义了槽。
当我运行这个并执行连接时,我得到:
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,但是我找不到一个这样创建窗口的例子。
使用新的连接方法进行编辑:
QObject::connect(pobjWin, &QWindow::activeChanged
,pobjSubNode, &clsXMLnode::windowSlotActiveChanged);activeChanged和windowSlotActiveChanged的原型是相同的。但是,当我用这个实现构建时,我得到:
/Users/simonplatten/XMLMPAM/clsMainWnd.cpp:733: error: no matching function for call to 'connect'
QObject::connect(pobjWin, &QWindow::activeChanged
^~~~~~~~~~~~~~~~Edit2我已将连接更改为:
QObject::connect(pobjWin->windowHandle(), &QWindow::activeChanged
,pobjSubNode, &clsXMLnode::windowSlotActiveChanged);现在我明白了:
2018-10-25 17:37:22.299066+0100 XMLMPAM[2930:423194] QObject::connect: invalid null parameter刚刚分配了:
QWindow* pobjW2 = pobjWin->windowHandle();我可以在调试器中看到pobjW2是NULL,这解释了错误。
改变线路:
QWidget* pobjWin = new QWidget(); 至:
QWindow* pobjWin = new QWindow();修复了连接问题,一旦我修复了所有使用QWindow版本而不是QWidget版本的方法,但是现在我没有任何可见的windows...investigating。奇怪的是,QWindow中的方法与在QWidget中执行完全相同工作的方法有不同的名称。
在修复问题后编辑3,并在创建连接之前帮助纠正连接并插入对showNormal的调用。代码与最初发布的相同,在任何连接之前调用pobjWin->showNormal。
发布于 2018-10-25 17:11:05
好的,我感谢eylanesc的输入,谢谢。
我不得不给以下人打电话:
pobjWin->showNormal();在尝试信号/时隙连接之前,信号和时隙连接的示例现在如下所示:
QObject::connect(pobjWin->windowHandle(), &QWindow::activeChanged
,pobjSubNode, &clsXMLnode::windowSlotActiveChanged);https://stackoverflow.com/questions/52993445
复制相似问题