开始写主逻辑部分
This commit is contained in:
parent
fa0b08c548
commit
3fed1d9180
@ -4,6 +4,7 @@ project(packqt VERSION 0.1 LANGUAGES CXX)
|
|||||||
|
|
||||||
set(CMAKE_PREFIX_PATH
|
set(CMAKE_PREFIX_PATH
|
||||||
"/home/typ/Qt5.14.2/5.14.2/gcc_64"
|
"/home/typ/Qt5.14.2/5.14.2/gcc_64"
|
||||||
|
"/home/typ/Dev/Boost"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON)
|
||||||
@ -24,6 +25,10 @@ if (MSVC)
|
|||||||
add_compile_options(-D_CRT_SECURE_NO_WARNINGS)
|
add_compile_options(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
|
find_package(Boost REQUIRED filesystem)
|
||||||
|
include_directories(${Boost_INCLUDE_DIR})
|
||||||
|
|
||||||
set(PROJECT_SOURCES
|
set(PROJECT_SOURCES
|
||||||
main.cpp
|
main.cpp
|
||||||
MainWidget.cpp
|
MainWidget.cpp
|
||||||
@ -54,7 +59,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(packqt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
|
target_link_libraries(packqt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets ${Boost_LIBRARIES})
|
||||||
|
|
||||||
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
||||||
# If you are developing for iOS or macOS you should consider setting an
|
# If you are developing for iOS or macOS you should consider setting an
|
||||||
|
@ -6,6 +6,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
|
|||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
setWindowTitle("打包Qt工具");
|
setWindowTitle("打包Qt工具");
|
||||||
connect_operator();
|
connect_operator();
|
||||||
|
control_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWidget::~MainWidget() { delete ui; }
|
MainWidget::~MainWidget() { delete ui; }
|
||||||
@ -20,7 +21,17 @@ void MainWidget::connect_operator()
|
|||||||
connect(ui->btnGenerate, &QPushButton::clicked, this, [=]() { generate(); });
|
connect(ui->btnGenerate, &QPushButton::clicked, this, [=]() { generate(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::add_env_btn()
|
void MainWidget::control_init()
|
||||||
|
{
|
||||||
|
ui->plainTextEdit->setEnabled(false);
|
||||||
|
#if !defined (NDEBUG)
|
||||||
|
ui->edBinary->setText("/home/typ/Downloads/build-QXmlEdit-Desktop_Qt_5_14_2_GCC_64bit-Release/build/qxmledit");
|
||||||
|
ui->edQtDir->setText("/home/typ/Qt5.14.2/5.14.2/gcc_64");
|
||||||
|
ui->edOutDir->setText("/home/typ/testpack");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWidget::add_env_btn()
|
||||||
{
|
{
|
||||||
QString env = SelectDirectory(this, nullptr);
|
QString env = SelectDirectory(this, nullptr);
|
||||||
if (env.isEmpty()) {
|
if (env.isEmpty()) {
|
||||||
@ -29,12 +40,58 @@ void MainWidget::add_env_btn()
|
|||||||
ui->listWidget->addItem(env);
|
ui->listWidget->addItem(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::generate()
|
void MainWidget::simple_log(const QString& info) { ui->plainTextEdit->appendPlainText(info + "\n"); }
|
||||||
{
|
|
||||||
|
|
||||||
|
std::vector<std::string> MainWidget::get_depend_on(const std::string& name, const std::vector<std::string>& env)
|
||||||
|
{
|
||||||
|
std::vector<std::string> vec;
|
||||||
|
std::string cmd{};
|
||||||
|
|
||||||
|
if (!env.empty()) {
|
||||||
|
cmd.append("export LD_LIBRARY_PATH=$LD_LIBRARY_PATH");
|
||||||
|
for (const auto& data : env) {
|
||||||
|
cmd.append(":" + data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cmd.append(" && ldd " + name);
|
||||||
|
char buffer[1024]{};
|
||||||
|
FILE* pf = nullptr;
|
||||||
|
if ((pf = popen(cmd.c_str(), "r")) == nullptr) {
|
||||||
|
return vec;
|
||||||
|
}
|
||||||
|
std::string result{};
|
||||||
|
while (std::fgets(buffer, sizeof(buffer), pf)) {
|
||||||
|
result.append(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::split(vec, result, boost::is_any_of("\t"));
|
||||||
|
return vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::del_env_btn()
|
std::vector<std::string> MainWidget::handle_result(const std::vector<std::string>& vec)
|
||||||
|
{
|
||||||
|
std::vector<std::string> ret;
|
||||||
|
for (const auto& data : vec) {
|
||||||
|
if (data.empty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
std::string tdata = boost::replace_all_copy(data, "=>", "");
|
||||||
|
std::vector<std::string> vt;
|
||||||
|
boost::split(vt, tdata, boost::is_any_of(" "));
|
||||||
|
if (vt.size() != 4) {
|
||||||
|
QString info = "长度不对,原始数据:\n" + QString::fromStdString(data);
|
||||||
|
simple_log(info);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (boost::starts_with(vt[2], "/lib")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ret.push_back(vt[2]);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWidget::del_env_btn()
|
||||||
{
|
{
|
||||||
QListWidgetItem* item = ui->listWidget->currentItem();
|
QListWidgetItem* item = ui->listWidget->currentItem();
|
||||||
if (!item) {
|
if (!item) {
|
||||||
@ -84,4 +141,24 @@ bool MainWidget::isOk(QWidget* parent, const QString& title, const QString& cont
|
|||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWidget::message(QWidget* parent, const QString& content) { QMessageBox::information(parent, "提示", content); }
|
||||||
|
|
||||||
|
void MainWidget::generate()
|
||||||
|
{
|
||||||
|
ui->plainTextEdit->clear();
|
||||||
|
envs_.clear();
|
||||||
|
|
||||||
|
binary_ = ui->edBinary->text().trimmed();
|
||||||
|
fs::path binary_dir = fs::path(binary_.toStdString()).parent_path();
|
||||||
|
envs_.push_back(binary_dir.string());
|
||||||
|
|
||||||
|
int env_cnt = ui->listWidget->count();
|
||||||
|
for (int i = 0; i < env_cnt; ++i) {
|
||||||
|
envs_.push_back(ui->listWidget->item(i)->text().toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto retPrevious = get_depend_on(binary_.toStdString(), envs_);
|
||||||
|
auto result = handle_result(retPrevious);
|
||||||
}
|
}
|
17
MainWidget.h
17
MainWidget.h
@ -6,6 +6,12 @@
|
|||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
@ -23,16 +29,27 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void connect_operator();
|
void connect_operator();
|
||||||
|
void control_init();
|
||||||
void add_env_btn();
|
void add_env_btn();
|
||||||
void del_env_btn();
|
void del_env_btn();
|
||||||
void generate();
|
void generate();
|
||||||
|
void simple_log(const QString& info);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<std::string> get_depend_on(const std::string& name, const std::vector<std::string>& env);
|
||||||
|
std::vector<std::string> handle_result(const std::vector<std::string>& vec);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QString SelectDirectory(QWidget* parent, QLineEdit* pEdit, const QString& pre_path = "");
|
static QString SelectDirectory(QWidget* parent, QLineEdit* pEdit, const QString& pre_path = "");
|
||||||
static QString SelectFile(QWidget* parent, QLineEdit* pEdit, const QString& info, const QString& filter);
|
static QString SelectFile(QWidget* parent, QLineEdit* pEdit, const QString& info, const QString& filter);
|
||||||
static bool isOk(QWidget* parent, const QString& title, const QString& content);
|
static bool isOk(QWidget* parent, const QString& title, const QString& content);
|
||||||
|
static void message(QWidget* parent, const QString& content);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWidget* ui;
|
Ui::MainWidget* ui;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString binary_{};
|
||||||
|
std::vector<std::string> envs_{};
|
||||||
};
|
};
|
||||||
#endif // MAINWIDGET_H
|
#endif // MAINWIDGET_H
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1026</width>
|
<width>1057</width>
|
||||||
<height>739</height>
|
<height>778</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -179,6 +179,9 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QListWidget" name="listWidget"/>
|
<widget class="QListWidget" name="listWidget"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPlainTextEdit" name="plainTextEdit"/>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||||
<item>
|
<item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user