diff --git a/widgets/toolbars/kpAiDrawingBar.cpp b/widgets/toolbars/kpAiDrawingBar.cpp index 27b8aac..26b36c0 100644 --- a/widgets/toolbars/kpAiDrawingBar.cpp +++ b/widgets/toolbars/kpAiDrawingBar.cpp @@ -51,7 +51,25 @@ kpAIDrawingBar::kpAIDrawingBar(QWidget *parent) loginConfigurationPage(); else */ - initUI(); + + m_AiMode = new AIModeDataThread(); + + initUI(); + + const char* json = R"( + { + "appId": "49080653", + "apiKey": "sd6XK461G446AHz43GAKMEme", + "secretKey": "dCauacFHm6CyWW5hVT3BGg7lavYxxXxB" + } + )"; + capability_settings_set_deploy_policy(CAPABILITY_VISION, PUBLIC_CLOUD); + + capability_settings_set_model(CAPABILITY_VISION,PUBLIC_CLOUD, "baidu"); + + capability_settings_set_model_config(Capability::CAPABILITY_VISION, + DeployPolicy::PUBLIC_CLOUD, + "baidu", json); setFixedWidth(250); } @@ -60,6 +78,8 @@ kpAIDrawingBar::~kpAIDrawingBar() { if (AiSettings) delete AiSettings; + if (m_AiMode) + delete m_AiMode; } /** @@ -315,6 +335,7 @@ void kpAIDrawingBar::initUI() buildButton->setFixedSize(224,36); buildButton->setStyleSheet(colorGrayButtonStyle); buildButton->setEnabled(false); + buildButtonFlag = false; /* 分页功能 */ stackedWidget = new QStackedWidget(centralWidget); @@ -393,7 +414,7 @@ void kpAIDrawingBar::initUI() connect(previousButton, &QPushButton::clicked, this, &kpAIDrawingBar::showPreviousPage); connect(nextButton, &QPushButton::clicked, this, &kpAIDrawingBar::showNextPage); connect(deleteButton, &QPushButton::clicked, this, &kpAIDrawingBar::deleteCurrentPage); - connect(&aiThread, &AIModeDataThread::finishedSignal, this, &kpAIDrawingBar::onThreadFinished); + connect(m_AiMode, &AIModeDataThread::finishedSignal, this, &kpAIDrawingBar::onThreadFinished); centralWidget->setFixedWidth(240); @@ -785,6 +806,7 @@ void kpAIDrawingBar::onGenerateButtonClicked() buildButton->setEnabled(false); buildButton->setText(i18n("In formation...")); buildButton->setStyleSheet(colorGrayButtonStyle); + buildButtonFlag = true; if(!deleteButton->isEnabled()) deleteButton->setEnabled(true); @@ -804,7 +826,7 @@ void kpAIDrawingBar::handleInputTextChanged() //考虑添加生成中判断 QString userText = static_cast(findChild())->toPlainText().trimmed(); bool enableButton = !userText.isEmpty(); - if (enableButton && !buildButton->isEnabled()) { + if (enableButton && !buildButton->isEnabled() && !buildButtonFlag) { qDebug()<<"buildButton set true"; buildButton->setEnabled(enableButton); buildButton->setStyleSheet(colorfulButtonStyle); @@ -815,29 +837,6 @@ void kpAIDrawingBar::handleInputTextChanged() } } -/** - * @brief AIModeDataThread::generateImageCallback - * AI生成后回调函数 - * @param imageData - * @param userData - */ -void AIModeDataThread::generateImageCallback(VisionImageData imageData, void* userData){ - - qDebug()<<"AI生成回调函数: length:"<finishedSignal(false, map, imageData.index, imageData.total, imageData.error_code); - emit AIMode->finishedSignal(true, map, imageData.index, imageData.total, imageData.error_code); -} - /** * @brief kpAIDrawingBar::addPageAndStoreImages * 添加AI生成后的图片及页 @@ -965,7 +964,6 @@ void kpAIDrawingBar::onThreadFinished(bool flag, QPixmap pixmap, int imageIndex, QPixmap map; if(!flag){ deleteImageGridWidget(); - aiThread.exit(); deleteButtonFlag = true; deleteButton->setEnabled(true); return; @@ -985,9 +983,71 @@ void kpAIDrawingBar::onThreadFinished(bool flag, QPixmap pixmap, int imageIndex, buildButton->setEnabled(true); buildButton->setText(i18n("Generate now")); buildButton->setStyleSheet(colorfulButtonStyle);//设置立即生成按钮为立即生成 + buildButtonFlag = false; addPageAndStoreImages(); } - aiThread.exit(); +} + + +AIModeDataThread::AIModeDataThread() +{ + +} + +AIModeDataThread::~AIModeDataThread() +{ + vision_destory_session(session); +} + +bool AIModeDataThread::setSessionStatus() +{ + if (m_sessionFlag) + return true; + + session = nullptr; + VisionResult ret = vision_create_session(&session); + if (ret != VISION_SUCCESS) { + qDebug()<<"创建失败VisionResult="<textBox; + if(imageData.index == 0) + emit AIMode->finishedSignal(false, map, imageData.index, imageData.total, imageData.error_code); + emit AIMode->finishedSignal(true, map, imageData.index, imageData.total, imageData.error_code); + qDebug()<<"------------------------------ generateImageCallback"; } /** @@ -997,25 +1057,6 @@ void kpAIDrawingBar::onThreadFinished(bool flag, QPixmap pixmap, int imageIndex, */ bool AIModeDataThread::someFunctionInThread() { - VisionSession session = nullptr; - VisionResult ret = vision_create_session(&session); - - - if (ret != VISION_SUCCESS) { - qDebug()<<"创建失败VisionResult="<count() - 1){ deleteButton->setEnabled(false); } diff --git a/widgets/toolbars/kpAiDrawingBar.h b/widgets/toolbars/kpAiDrawingBar.h index 42e5636..4f89118 100644 --- a/widgets/toolbars/kpAiDrawingBar.h +++ b/widgets/toolbars/kpAiDrawingBar.h @@ -53,6 +53,7 @@ #include #include #include +#include #define LOADING_IMAGE "/usr/share/kolourpaint/pics/loading.gif" #define BG_IMAGE "/usr/share/kolourpaint/pics/bg@2x.png" @@ -68,13 +69,17 @@ * @brief The AIModeDataThread class * 线程类,用于跑AI的服务 */ -class AIModeDataThread : public QThread { +class AIModeDataThread : public QObject +{ Q_OBJECT public: - void run() override { - someFunctionInThread(); - } + AIModeDataThread(); + ~AIModeDataThread(); + + bool setSessionStatus(); + bool someFunctionInThread(); + void setAIData (QString str, QSize size, int multiple, int quantity, VisionImageStyle Style){ textBox = str; AIImageSize = size; @@ -87,7 +92,6 @@ signals: void finishedSignal(bool flag, QPixmap pixmap, int imageIndex, int imageSum, int errorCode); private: - bool someFunctionInThread(); void sendErrorSignal(int ret){ emit finishedSignal(false, QPixmap(), 0, 1, ret); for(int i = 0; i < quantityNum; i++) @@ -102,6 +106,8 @@ private: QSize AIImageSize; QString textBox; VisionImageStyle ImageStyle; + bool m_sessionFlag = false; + VisionSession session; }; /** @@ -173,9 +179,10 @@ private slots: void onStyleMoreButtonClick(); void startThread() { - // 启动线程 - aiThread.setAIData(textBox, AIImageSize, multipleNum, quantityNum, ImageStyle); - aiThread.start(); + if (m_AiMode->setSessionStatus()){ + m_AiMode->setAIData(textBox, AIImageSize, multipleNum, quantityNum, ImageStyle); + m_AiMode->someFunctionInThread(); + } } void onThreadFinished(bool flag, QPixmap pixmap, int imageIndex, int imageSum, int errorCode); @@ -205,6 +212,7 @@ private: bool styleFlag; //风格标志位,用于判断按下哪一个风格 bool deleteButtonFlag = true; + bool buildButtonFlag; QGSettings *AiSettings; //监听配置信息 QSize AIImageSize; //图片大小 @@ -240,7 +248,7 @@ private: QVector> imagesVector; //生成图像数据集成 VisionImageStyle ImageStyle; //风格样式 - AIModeDataThread aiThread; //线程类 + AIModeDataThread *m_AiMode; //AI生成程序 }; #endif