在opencv2.4.5中使用createButton(Qt gui功能)段错误

时间:2013-05-10 10:04:18

标签: c++ qt opencv

我实际上遇到了以下OpenCV示例的问题:

http://docs.opencv.org/2.4.5/modules/highgui/doc/qt_new_functions.html

(我更新了env&的路径,添加了样本中没有的回调函数。)

我编译了Opencv设置Qt On:


 GUI: 
--     QT 4.x:                      YES (ver 4.8.2 EDITION = OpenSource)
--     QT OpenGL support:           NO
--     OpenGL support:              NO

当我尝试在Qt doc中找到的代码时:我有以下回溯:

(gdb) backtrace
#0  0x00007ffff14f53e8 in QAction::setEnabled(bool) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#1  0x00007ffff67bf0db in GuiReceiver::enablePropertiesButtonEachWindow() () from /usr/local/lib/libopencv_highgui.so.2.4
#2  0x00007ffff67c02db in GuiReceiver::addButton(QString, int, int, void*, void*) () from /usr/local/lib/libopencv_highgui.so.2.4
#3  0x00007ffff67c5e9a in GuiReceiver::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/local/lib/libopencv_highgui.so.2.4
#4  0x00007ffff0fcef77 in QMetaMethod::invoke(QObject*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) const ()
   from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#5  0x00007ffff0fd134c in QMetaObject::invokeMethod(QObject*, char const*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument)
    () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#6  0x00007ffff67b23a7 in cvCreateButton () from /usr/local/lib/libopencv_highgui.so.2.4
#7  0x0000000000400f6c in main (argc=, argv=) at main.cpp:20

有人有同样的问题吗? 我只想确切地说我不想在Qt中嵌入Opencv,而只是使用opencv提供的Qt功能。

我在这里找到了答案的开头: How to use cv::createButton prototype in OpenCV

但这不相关......

感谢您的帮助。

仍有一些问题,有一段代码:

#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

void callbackButton(int state, void* userdata){}

int main(int ac, char **av){

     namedWindow("main1",CV_WINDOW_NORMAL);
     namedWindow("main2",CV_WINDOW_AUTOSIZE | CV_GUI_NORMAL);
     int a = 0;

     createButton("test",callbackButton, &a, CV_CHECKBOX,1);
     return 0;
}

2 个答案:

答案 0 :(得分:1)

无法确认或拒绝这个问题是真的,因为我的机器上有不同的设置(OpenCV 2.4.9和Qt 5.0.2)。

但我发现创建一个CV_GUI_NORMAL窗口会导致应用程序崩溃。文档说明:

  

CV_GUI_NORMAL CV_GUI_EXPANDED :CV_GUI_NORMAL是绘制没有状态栏和工具栏的窗口的旧方法,而CV_GUI_EXPANDED是新的增强GUI。

我建议您暂时使用CV_GUI_EXPANDED创建窗口。

答案 1 :(得分:0)

我也无法使用OpenCV 2.4.5 / Qt 4.8.0创建一个按钮。我下载了OpenCV 2.4.9并在相同的设置下安装它,现在它可以工作。