我敢肯定这可能很简单。我整天都在努力寻找解决方案,但我做不到。请帮帮我!
Qt Creator 4.15.1、MinGW 8.1.0 64-bit for C++、CMake 3.19.2(使用 Cmake 是先决条件) Error_screen
我认为错误是我错误地连接了库 Qt6AxContainer.lib。
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(HeatMap2 VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check https://doc.qt.io/qt/deployment-android.html for more information.
# They need to be set before the find_package( ...) calls below.
#if(ANDROID)
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
# if (ANDROID_ABI STREQUAL "armeabi-v7a")
# set(ANDROID_EXTRA_LIBS
# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
# endif()
#endif()
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_package(Qt6 COMPONENTS AxContainer REQUIRED)
add_library(obj D:/Qt/6.1.2/msvc2019_64/lib/Qt6AxContainer.lib)
target_link_libraries(obj PRIVATE Qt6::AxContainer)
set(PROJECT_SOURCES
main.cpp
widget.cpp
widget.h
widget.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(HeatMap2
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
if(ANDROID)
add_library(HeatMap2 SHARED
${PROJECT_SOURCES}
)
else()
add_executable(HeatMap2
${PROJECT_SOURCES}
)
endif()
endif()
target_link_libraries(HeatMap2 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
set_target_properties(HeatMap2 PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(HeatMap2)
endif()
widjet.cpp
#include "widget.h"
#include "./ui_widget.h"
#include <QtGui>
#include <ActiveQt/qaxobject.h>
#include <ActiveQt/qaxbase.h>
#include <QTableWidget>
QString file("D:\\Programs\\123.xlsx");
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->pushButton, &QPushButton::clicked, this, &Widget::readExcel);
}
Widget::~Widget()
{
delete ui;
}
void Widget::readExcel()
{
QAxObject* excel = new QAxObject("Excel.Application", this);
QAxObject* workbooks = excel->querySubObject("Workbooks");
QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", file);
excel->dynamicCall("SetVisible(bool", false);
QAxObject* worksheet = workbook->querySubObject("Worksheets(int)", 1);
QAxObject* usedrange = worksheet->querySubObject("UsedRange");
QAxObject* rows = usedrange->querySubObject("Rows");
QAxObject* columns = usedrange->querySubObject("Columns");
int intRowStart = usedrange->property("Row").toInt();
int intColStart = usedrange->property("Columns").toInt();
int intCols = columns->property("Count").toInt();
int intRows = rows->property("Count").toInt();
qDebug()<<intRows;
qDebug()<<intCols;
ui->tableWidget->setRowCount(intRowStart + intRows);
ui->tableWidget->setColumnCount(intColStart + intCols);
for ( int row = 0; row < intRows; row++ ){
for ( int col = 0; col < intCols; col++ ){
QAxObject* cell = worksheet->querySubObject("Cells(int,int)", col + 1, row + 1);
QVariant value = cell->dynamicCall("Value()");
QTableWidgetItem* item = new QTableWidgetItem(value.toString());
ui->tableWidget->setItem(row, col, item);
}
}
workbook->dynamicCall("Close");
excel->dynamicCall("Quit()");
}
我做了一些更改,但结果是一样的: 在此处输入图像描述
add_library(widget widget.cpp ${Cmake_hdr_moc} ${Cmake_form_hdr})
target_link_libraries (widget Qt6::Widgets)
add_executable(heatmap main.cpp)
target_link_libraries(heatmap widget)
add_library(obj D:/Qt/6.1.2/msvc2019_64/lib/Qt6AxContainer.lib)
target_link_libraries(heatmap Qt6::AxContainer)
cmake_minimum_required(VERSION 3.5)
project(HeatMap2 VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_package(Qt6 COMPONENTS AxContainer REQUIRED)
set(PROJECT_SOURCES
main.cpp
widget.cpp
widget.h
widget.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(HeatMap2
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
if(ANDROID)
add_library(HeatMap2 SHARED
${PROJECT_SOURCES}
)
else()
add_executable(HeatMap2
${PROJECT_SOURCES}
)
endif()
endif()
target_link_libraries(HeatMap2 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
#=======================================================
target_link_libraries(HeatMap2 PRIVATE Qt6::AxContainer)
#=======================================================
set_target_properties(HeatMap2 PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(HeatMap2)
endif()