我正在開發一個使用 QT 庫的 CMAKE C 專案。(對我來說是 5.15.3,對其他人來說是 5.12.x)
在這個專案中,有一個class Vtk3DViewer : public QWidget. 在其建構式中,它嘗試創建其型別的成員變數之一QVTKOpenGLNativeWidget。這是來自 VTK 庫。(位于 include\vtk-9.2\QVTKOpenGLNativeWidget.h 中)
對我來說,new QVTKOpenGLNativeWidget()我的 QWidget 的建構式中的這個呼叫失敗并出現以下錯誤:
“必須在 QWidget 之前構建 QApplication”
但僅此而已,我們確實main()在此之前創建了一個 QApplication 。而這只發生在 Windows 上。Linux 構建似乎沒有任何問題。
從 Debug 切換到 RelWithDebugInfo 會移動錯誤 - 使其更早發生并創建一個QToolBarExt代替。
為什么會發生這種情況,我該如何解決?
這是一個例子main():
int main(int argc, char* argv[])
{
// Set info for settings & registry
QApplication::setOrganizationName(COMPANY_NAME);
QApplication::setOrganizationDomain(COMPANY_DOMAIN);
QApplication::setApplicationName(APP_NAME);
// Set up for software-based backend for VTK
QApplication::setAttribute(Qt::AA_UseOpenGLES);
QApplication a(argc, argv);
a.setWindowIcon(QIcon(":/main-window/favicon.ico"));
// Instantiate singletons
TaskExecutionManager::getInstance(); // Instantiate the task manager
DataDispatcher::getInstance();
// Create main window with default size
MainWindow w;
w.show();
// Start application event loop
return a.exec();
}
然后主視窗的建構式呼叫:
void MainWindow::initializeMainWindow(Ui::MainWindow* ui)
{
this->setDockOptions(AnimatedDocks | AllowNestedDocks | AllowTabbedDocks | GroupedDragging);
// Main toolbar
m_topToolBar = new QToolBarExt(this); // This causes a "Must construct a QApplication before a QWidget" error
}
uj5u.com熱心網友回復:
問題是 VTK 是在 RELEASE 中構建的,而我們的專案是在 DEBUG 中構建的。
(我不認為這是一個問題,因為我們永遠不需要進入/除錯 VTK 的代碼)
在這些情況下,似乎會出現這個神秘/不正確的錯誤訊息。確保 VTK 和它包含的專案以相同的方式編譯修復它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513276.html
標籤:C 视觉工作室qtVTK
