我正在尝试抓住插入计算机的网络摄像头的名称并将其推入组合框,然后再访问该名称。这是我的代码:
#include <QApplication>
#include <QComboBox>
#include <QCameraInfo>
#include <iostream>
int main(int argc, char *argv[])
{
QApplication app{ argc, argv };
QComboBox combo;
QList<QCameraInfo> info = QCameraInfo::availableCameras();
foreach(QCameraInfo i, info)
combo.addItem(i.description());
combo.show();
std::cout << combo.currentText().toStdString() << std::endl;
return app.exec();
}
代码创建并显示一个组合框,其中包含我已插入计算机的网络摄像头的名称。然后,在尝试将组合框字符串打印到控制台时,它会抛出一个访问冲突异常。
如果我评论cout行,一切都很好,但退出时我得到一个Debug Assertion失败!消息:
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
我的意思是我删除一个已删除的对象(组合框中的QString ???)。
如果我更改代码以用假人填充组合框:
#include <QApplication>
#include <QComboBox>
#include <QCameraInfo>
#include <iostream>
int main(int argc, char *argv[])
{
QApplication app{ argc, argv };
for(int i=0; i<2; i++)
combo.addItem(QString("la la la");
combo.show();
std::cout << combo.currentText().toStdString() << std::endl;
return app.exec();
}
我在cout上得到了同样的错误,但如果我注释掉该行,则应用程序正确退出。我使用的是Visual Studio 2013,Windows 7和Qt5。
答案 0 :(得分:0)
现在它有效。我保留了相同的源代码,但完全取消了现有项目并从头开始新的项目。
我发现如果我将Runtime Library标志设置为Multi-Threaded DLL Debug,我将收到访问冲突错误。如果我将它设置为Multi-Threaded DLL,那很好。
可能还有一些其他项目设置有所贡献,但这似乎是罪魁祸首。