wangyaojie 2 anos atrás
pai
commit
0f6913e985

+ 54 - 0
client/answerWidget.cpp

@@ -1251,6 +1251,45 @@ void answerWidget::on_btn_all_clicked()
             }
         }
     }
+    setChecked(ui->btn_all, true);
+    setChecked(ui->btn_marked, false);
+    setChecked(ui->btn_answered, false);
+    setChecked(ui->btn_unanswered, false);
+}
+
+void answerWidget::setChecked(QPushButton *btn, bool bChecked)
+{
+    QString sNormal = QString(R"(QPushButton
+                              {
+                                  outline:none;
+                                  background:rgba(242,243,247,1);
+                                  border-radius:%1px;
+                                  border:1px solid rgba(240,244,249,1);
+                                  font-size:%2px;
+                                  font-family:"Microsoft YaHei";
+                                  font-weight:500;
+                                  color:rgba(153,153,153,1);
+                                  padding-left:%3px;
+                                  text-align:left;
+                              })").arg((int)(g_appInfoPtr->m_fRate*14))
+                                .arg((int)(g_appInfoPtr->m_fRate*12))
+                                .arg((int)(g_appInfoPtr->m_fRate*15));
+    QString sChecked = QString(R"(QPushButton
+                               {
+                                   outline:none;
+                                   background:rgba(242,243,247,1);
+                                   border-radius:%1px;
+                                   border:1px solid rgba(189,200,217,1);
+                                   font-size:%2px;
+                                   font-family:"Microsoft YaHei";
+                                   font-weight:500;
+                                   color:rgba(153,153,153,1);
+                                   padding-left:%3px;
+                                   text-align:left;
+                               })").arg((int)(g_appInfoPtr->m_fRate*14))
+                                    .arg((int)(g_appInfoPtr->m_fRate*12))
+                                    .arg((int)(g_appInfoPtr->m_fRate*15));
+    btn->setStyleSheet(bChecked ? sChecked : sNormal);
 }
 
 void answerWidget::on_btn_answered_clicked()
@@ -1272,6 +1311,11 @@ void answerWidget::on_btn_answered_clicked()
             }
         }
     }
+
+    setChecked(ui->btn_all, false);
+    setChecked(ui->btn_marked, false);
+    setChecked(ui->btn_answered, true);
+    setChecked(ui->btn_unanswered, false);
 }
 
 void answerWidget::on_btn_unanswered_clicked()
@@ -1293,6 +1337,11 @@ void answerWidget::on_btn_unanswered_clicked()
             }
         }
     }
+
+    setChecked(ui->btn_all, false);
+    setChecked(ui->btn_marked, false);
+    setChecked(ui->btn_answered, false);
+    setChecked(ui->btn_unanswered, true);
 }
 
 void answerWidget::on_btn_marked_clicked()
@@ -1314,6 +1363,11 @@ void answerWidget::on_btn_marked_clicked()
             }
         }
     }
+
+    setChecked(ui->btn_all, false);
+    setChecked(ui->btn_marked, true);
+    setChecked(ui->btn_answered, false);
+    setChecked(ui->btn_unanswered, false);
 }
 
 void answerWidget::on_btn_allNum_clicked()

+ 2 - 0
client/answerWidget.h

@@ -3,6 +3,7 @@
 
 #include <QWidget>
 #include <QTimer>
+#include <QPushButton>
 #include "CHttpBll.h"
 #include "question.h"
 #include "questionSet.h"
@@ -78,6 +79,7 @@ private:
     void stopCapture();
     void onRenderVideoFrame(const char* userId, TRTCVideoStreamType streamType, TRTCVideoFrame* frame);
 	void checkRemoteBreach();
+    void setChecked(QPushButton *btn, bool bChecked);
 
     Ui::answerWidget *ui;
 	

+ 3 - 1
client/awBackground.cpp

@@ -101,6 +101,7 @@ void awBackground::initUI()
         if(m_pWaitExam == nullptr)
         {
             m_pWaitExam = std::make_shared<awWaitExam>(this);
+            connect(m_pWaitExam.get(), &awWaitExam::gobackLogin, this, &awBackground::gobackLogin);
             connect(m_pWaitExam.get(), &awWaitExam::exitEaxm, this, [&](){
                 m_pWaitExam.reset();
                 emit closeWidget();
@@ -210,12 +211,13 @@ void awBackground::onGetCourseInfo(CGetCourseInfo getCourseInfo)
 	{
         if(getCourseInfo.sMessage.isEmpty())
         {
-            ShowMsg(QString::fromLocal8Bit("获取科目信息失败"), g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
+            ShowMsg(QString::fromLocal8Bit("获取科目信息失败,退出登录"), g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
         }
         else
         {
             ShowMsg(getCourseInfo.sMessage, g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
         }
+        QTimer::singleShot(2000, this, [&](){emit gobackLogin();});
 	}
 }
 

+ 6 - 4
client/awWaitExam.cpp

@@ -125,13 +125,13 @@ void awWaitExam::onStartExam(CStartExam startExam)
 	{
         if(startExam.sMessage.isEmpty())
         {
-            ShowMsg(QString::fromLocal8Bit("开始考试失败"), (QWidget*)g_appInfoPtr->m_pAnsBgWidget->parent(), MSG_ICON_TYPE::mit_error);
+            ShowMsg(QString::fromLocal8Bit("开始考试失败,退出登录"), (QWidget*)g_appInfoPtr->m_pAnsBgWidget->parent(), MSG_ICON_TYPE::mit_error);
         }
         else
         {
             ShowMsg(startExam.sMessage, (QWidget*)g_appInfoPtr->m_pAnsBgWidget->parent(), MSG_ICON_TYPE::mit_error);
         }
-        QTimer::singleShot(2000, this, [&](){emit exitEaxm();});
+        QTimer::singleShot(2000, this, [&](){emit gobackLogin();});
 	}
 }
 
@@ -188,12 +188,13 @@ void awWaitExam::onGetExamRecordPaperStruct(CGetExamRecordPaperStruct getExamRec
 	{
         if(getExamRecordPaperStruct.sMessage.isEmpty())
         {
-            ShowMsg(QString::fromLocal8Bit("获取试卷结构失败"), g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
+            ShowMsg(QString::fromLocal8Bit("获取试卷结构失败,退出登录"), g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
         }
         else
         {
             ShowMsg(getExamRecordPaperStruct.sMessage, g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
         }
+        QTimer::singleShot(2000, this, [&](){emit gobackLogin();});
 	}
 }
 
@@ -210,12 +211,13 @@ void awWaitExam::onGetExamProperty(CGetExamProperty getExamProperty)
 	{
         if(getExamProperty.sMessage.isEmpty())
         {
-            ShowMsg(QString::fromLocal8Bit("获取考试信息失败"), g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
+            ShowMsg(QString::fromLocal8Bit("获取考试信息失败,退出登录"), g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
         }
         else
         {
             ShowMsg(getExamProperty.sMessage, g_appInfoPtr->m_pAnsBgWidget, MSG_ICON_TYPE::mit_error);
         }
+        QTimer::singleShot(2000, this, [&](){emit gobackLogin();});
 	}
 }
 

+ 1 - 0
client/awWaitExam.h

@@ -16,6 +16,7 @@ class awWaitExam : public QWidget
 signals:
     void enterExam();
     void exitEaxm();
+    void gobackLogin();
 public:
     explicit awWaitExam(QWidget *parent = nullptr);
     ~awWaitExam();

+ 10 - 10
client/awqn_item.cpp

@@ -65,12 +65,12 @@ void awqn_item::refreshStatus()
             font-size:%1px;
             font-family:"Microsoft YaHei";
             font-weight:400;
-            color:rgba(255,159,67,1);
-            background:rgba(255,255,255,1);
-            border:%2px solid rgba(255,159,67,1);
-            border-radius:%3px;
+            color:rgba(255,255,255,1);
+            background:rgba(255,159,67,1);
+            border:0px solid rgba(255,159,67,1);
+            border-radius:%2px;
         })").arg((int)(g_appInfoPtr->m_fRate*12))
-            .arg((int)(g_appInfoPtr->m_fRate*1 < 1 ? 1 : g_appInfoPtr->m_fRate*1))
+            //.arg((int)(g_appInfoPtr->m_fRate*1 < 1 ? 1 : g_appInfoPtr->m_fRate*1))
             .arg((int)(g_appInfoPtr->m_fRate*15));
     QString sAnsweredStyle = QString(R"(QPushButton
         {
@@ -78,12 +78,12 @@ void awqn_item::refreshStatus()
             font-size:%1px;
             font-family:"Microsoft YaHei";
             font-weight:400;
-            color:rgba(131,172,247,1);
-            background:rgba(255,255,255,1);
-            border:%2px solid rgba(131,172,247,1);
-            border-radius:%3px;
+            color:rgba(255,255,255,1);
+            background:rgba(131,172,247,1);
+            border:0px solid rgba(131,172,247,1);
+            border-radius:%2px;
         })").arg((int)(g_appInfoPtr->m_fRate*12))
-            .arg((int)(g_appInfoPtr->m_fRate*1 < 1 ? 1 : g_appInfoPtr->m_fRate*1))
+         //   .arg((int)(g_appInfoPtr->m_fRate*1 < 1 ? 1 : g_appInfoPtr->m_fRate*1))
             .arg((int)(g_appInfoPtr->m_fRate*15));
     QString sCurrentStyle = QString(R"(QPushButton
         {

+ 76 - 0
common/common.pri

@@ -0,0 +1,76 @@
+DEFINES += QT_DEPRECATED_WARNINGS _CRT_SECURE_NO_WARNINGS
+
+HEADERS += \
+    $$PWD/CAppInfo.h \
+    $$PWD/CAudioPlayerProc.h \
+    $$PWD/CCommonTools.h \
+    $$PWD/CHttpBll.h \
+    $$PWD/CHttpClient.h \
+    $$PWD/CHttpInterceptor.h \
+    $$PWD/CLogTrack.h \
+    $$PWD/CMultiMonitorEnumerator.h \
+    $$PWD/CQREncode.h \
+    $$PWD/CSqlite3DBProc.h \
+    $$PWD/MixerMicrophoneValue.h \
+    $$PWD/QAESEncryption.h \
+    $$PWD/httpDataDef.h \
+    $$PWD/logproc.h \
+    $$PWD/popMsgBox.h
+
+SOURCES += \
+    $$PWD/CAppInfo.cpp \
+    $$PWD/CAudioPlayerProc.cpp \
+    $$PWD/CCommonTools.cpp \
+    $$PWD/CHttpBll.cpp \
+    $$PWD/CHttpClient.cpp \
+    $$PWD/CHttpInterceptor.cpp \
+    $$PWD/CLogTrack.cpp \
+    $$PWD/CQREncode.cpp \
+    $$PWD/CSqlite3DBProc.cpp \
+    $$PWD/MixerMicrophoneValue.cpp \
+    $$PWD/QAESEncryption.cpp \
+    $$PWD/popMsgBox.cpp
+
+
+PLUGINS_DIR = C:/project/qtPlugins
+OPENCV_DIR = C:/opencv342/opencv/build
+OPEN_SSL_DIR = C:/project/qtPlugins/openssl-1.0.2m/build/x86
+
+INCLUDEPATH += $$PLUGINS_DIR/curl-7.69.1/builds/x86/include \
+    $$OPENCV_DIR/include \
+    $$PLUGINS_DIR/sqlite3/include \
+    $$PLUGINS_DIR/jsoncpp/include \
+    $$PLUGINS_DIR/portaudio/portaudio/include \
+    $$PLUGINS_DIR/MediaInfo/include \
+    $$PLUGINS_DIR/qrencode/include \
+    $$OPEN_SSL_DIR/include
+
+LIBS += -L$$PLUGINS_DIR/curl-7.69.1/builds/x86/lib  -llibcurl \
+    -L$$PLUGINS_DIR/sqlite3/lib/x86 -lsqlite3 \
+    -L$$PLUGINS_DIR/quazip/lib/x86 -lquazip \
+    -L$$PLUGINS_DIR/portaudio/portaudio/lib/x86 -lportaudio \
+    -L$$PLUGINS_DIR/MediaInfo/lib/x86 -lMediaInfo \
+    -L$$PLUGINS_DIR/qrencode/lib/x86 -lqrencode \
+    -L$$OPEN_SSL_DIR/lib -llibeay32 -lssleay32 \
+    -lUser32 -limm32 -lole32 -loleaut32 \
+    -lws2_32 \
+    -lwldap32 \
+    -lwinmm \
+    -lwinspool \
+    -lStrmiids \
+    -lversion \
+    -lDbgHelp \
+    -lIphlpapi
+
+win32:CONFIG(release, debug|release):{
+    LIBS +=  -L$$PLUGINS_DIR/jsoncpp/lib/x86 -llib_json \
+        -L$$OPENCV_DIR/x86/lib -lopencv_world342
+}
+else:win32:CONFIG(debug, debug|release): {
+    LIBS += -L$$PLUGINS_DIR/jsoncpp/lib/x86 -llib_jsond \
+        -L$$OPENCV_DIR/x86/lib -lopencv_world342d
+}
+
+FORMS += \
+    $$PWD/popMsgBox.ui
+

+ 23 - 0
component/component.pri

@@ -0,0 +1,23 @@
+QT       += websockets
+
+HEADERS += \
+    $$PWD/CKeyBoardHook.h \
+    $$PWD/CWebsocketProc.h \
+    $$PWD/CheckHeaderView.h \
+    $$PWD/CustomIconStyle.h \
+    $$PWD/PagingWidget.h \
+    $$PWD/clOperation.h
+
+SOURCES += \
+    $$PWD/CKeyBoardHook.cpp \
+    $$PWD/CWebsocketProc.cpp \
+    $$PWD/CheckHeaderView.cpp \
+    $$PWD/CustomIconStyle.cpp \
+    $$PWD/PagingWidget.cpp \
+    $$PWD/clOperation.cpp
+
+FORMS += \
+    $$PWD/PagingWidget.ui \
+    $$PWD/clOperation.ui
+
+

+ 22 - 0
face/face.pri

@@ -0,0 +1,22 @@
+FORMS += \
+    $$PWD/faceCompare.ui \
+    $$PWD/faceLiveness.ui
+
+HEADERS += \
+    $$PWD/CFaceRecProc.h \
+    $$PWD/faceCompare.h \
+    $$PWD/faceLiveness.h \
+    $$PWD/inprogressFace.h
+
+SOURCES += \
+    $$PWD/CFaceRecProc.cpp \
+    $$PWD/faceCompare.cpp \
+    $$PWD/faceLiveness.cpp \
+    $$PWD/inprogressFace.cpp
+
+
+SEETAFACESDK_PATH = C:/project/qtPlugins/seetaFaceSdk
+INCLUDEPATH += $$SEETAFACESDK_PATH/include
+
+win32:CONFIG(release, debug|release): LIBS += -L$$SEETAFACESDK_PATH/lib/x86 -lSeetaLivingChecker600 -lSeetaEyeStateDetector200 -lSeetaFaceDetector600 -lSeetaFaceRecognizer610 -lSeetaFaceTracking600 -lSeetaFaceLandmarker600 -lSeetaFaceAntiSpoofingX600 -lSeetaPoseEstimation600
+else:win32:CONFIG(debug, debug|release): LIBS +=  -L$$SEETAFACESDK_PATH/lib/x86 -lSeetaLivingChecker600d -lSeetaEyeStateDetector200d -lSeetaFaceDetector600d -lSeetaFaceRecognizer610d -lSeetaFaceTracking600d -lSeetaFaceLandmarker600d -lSeetaFaceAntiSpoofingX600d -lSeetaPoseEstimation600d

+ 162 - 0
question/fbBlank.cpp

@@ -0,0 +1,162 @@
+#include "fbBlank.h"
+#include "ui_fbBlank.h"
+
+#include <QFile>
+#include <QTextBlock>
+//#include "MsgDlg.h"
+
+#include "CAppInfo.h"
+
+fbBlank::fbBlank(int nOrder, QWidget *parent) :
+    CBaseWidget(parent),
+    ui(new Ui::fbBlank)
+{
+    ui->setupUi(this);
+
+    setAttribute(Qt::WA_DeleteOnClose);
+
+    m_nOrder = nOrder;
+
+//    QFile qssFile(":/qss/main.qss");
+//    qssFile.open(QFile::ReadOnly);
+//    QString qss;
+//    qss = qssFile.readAll();
+//    setStyleSheet(qss);
+    setStyleSheet(g_appInfoPtr->m_sQssStr);
+}
+
+fbBlank::~fbBlank()
+{
+    delete ui;
+}
+
+int fbBlank::setUI(const int nWidth)
+{
+    setGeometry(0, 0, nWidth, g_appInfoPtr->m_fRate*60);
+    QString sText = QChar('A' + m_nOrder -1);
+    ui->btn_blankName->setText(sText);
+    ui->btn_blankName->setGeometry(0, g_appInfoPtr->m_fRate*15, g_appInfoPtr->m_fRate*30, g_appInfoPtr->m_fRate*30);
+    ui->tedt_blank->setGeometry(ui->btn_blankName->x() + ui->btn_blankName->width() + g_appInfoPtr->m_fRate*20, g_appInfoPtr->m_fRate*10, g_appInfoPtr->m_fRate*640, g_appInfoPtr->m_fRate*40);
+    return g_appInfoPtr->m_fRate*60;
+}
+
+int fbBlank::widgetType()
+{
+    return wt_blank;
+}
+
+void fbBlank::on_tedt_blank_textChanged()
+{    
+    QApplication::processEvents();
+    emit answerChanged();
+}
+
+QString fbBlank::getAnswer()
+{
+    return ui->tedt_blank->toPlainText();
+
+//    Json::Value jBody = Json::Value::null;
+//    auto bodyDoc = ui->tedt_blank->document();
+//    if(bodyDoc->isEmpty())
+//    {
+//        jBody = Json::ValueType::arrayValue;
+//    }
+//    else
+//    {
+//        Json::Value sectionJson = Json::Value::null;
+//        for (QTextBlock it = bodyDoc->begin(); it != bodyDoc->end(); it = it.next())
+//        {
+//            Json::Value blocksJson = Json::Value::null;
+//            for(auto fragit = it.begin(); !fragit.atEnd(); ++fragit)
+//            {
+//                if(fragit.fragment().charFormat().isImageFormat())
+//                {//图片
+//                    const std::string& txt = fragit.fragment().charFormat().toImageFormat().name().toLocal8Bit().toStdString();
+
+//                    if(0 == txt.find_first_of("data:image/"))
+//                    {
+
+//                    }
+//                    else
+//                    {
+
+//                    }
+//                }
+//                else
+//                {//文本
+//                    Json::Value blockItem;
+//                    blockItem["type"] = "text";
+//                    blockItem["value"] = fragit.fragment().text().toStdString();
+////                    //加粗
+////                    if(fragit.fragment().charFormat().fontWeight() == QFont::Bold)
+////                    {
+////                        blockItem["param"]["font"]["bold"] = true;
+////                    }
+
+////                    //斜体
+////                    if(fragit.fragment().charFormat().fontItalic())
+////                    {
+////                        blockItem["param"]["font"]["italic"] = true;
+////                    }
+
+////                    //下划线
+////                    if(fragit.fragment().charFormat().fontUnderline())
+////                    {
+////                        blockItem["param"]["font"]["underline"] = true;
+////                    }
+//                    blocksJson.append(blockItem);
+//                }
+//            }
+//            Json::Value sectionItem = Json::Value::null;
+//            if(blocksJson.size() > 0)
+//            {
+//                sectionItem["blocks"] = blocksJson;
+//            }
+//            else
+//            {
+//                sectionItem["blocks"] = Json::ValueType::arrayValue;
+//            }
+//            sectionJson.append(sectionItem);
+//        }
+
+//        if(sectionJson.size() > 0)
+//        {
+//            jBody = sectionJson;
+//        }
+//        else
+//        {
+//            jBody = Json::ValueType::arrayValue;
+//        }
+//    }
+//    return jBody;
+}
+
+void fbBlank::setAnswer(QString sAnswer)
+{
+    ui->tedt_blank->setText(sAnswer);
+//    QTextCursor cursor = ui->tedt_blank->textCursor();
+
+//        int nSize = jAnswer.size();
+//        for(int i = 0; i < nSize; i ++)
+//        {
+//            Json::Value blocks = jAnswer[i];
+//            for(int j = 0; j < (int)blocks["blocks"].size(); j++)
+//            {
+//                if(blocks["blocks"][j]["type"].asString() == "text")
+//                {
+//                    QTextCharFormat fmt;
+//                    QFont font;
+//                    font.setFamily("Microsoft YaHei");
+//                    font.setPixelSize(g_appInfoPtr->m_fRate*14);
+//                    font.setWeight(QFont::Medium);
+//                    fmt.setFont(font);
+//                    cursor.insertText((blocks["blocks"][j]["value"].asString().c_str()), fmt);
+//                }
+//            }
+//            if(i < nSize - 1)
+//            {
+//                cursor.insertText("\n");
+//            }
+//        }
+//    ui->tedt_blank->setTextCursor(cursor);
+}

+ 34 - 0
question/fbBlank.h

@@ -0,0 +1,34 @@
+#ifndef FBBLANK_H
+#define FBBLANK_H
+
+#include <QWidget>
+#include "CBaseWidget.h"
+#include "json/json.h"
+
+namespace Ui {
+class fbBlank;
+}
+
+class fbBlank : public CBaseWidget
+{
+    Q_OBJECT
+
+signals:
+    void answerChanged();
+public:
+    explicit fbBlank(int nOrder, QWidget *parent = nullptr);
+    ~fbBlank();
+
+    void setAnswer(QString sAnswer);
+    QString getAnswer();
+    int setUI(const int nWidth);
+    int widgetType();
+private slots:
+    void on_tedt_blank_textChanged();   
+private:
+    Ui::fbBlank *ui;
+
+    int m_nOrder;
+};
+
+#endif // FBBLANK_H

+ 48 - 0
question/fbBlank.ui

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>fbBlank</class>
+ <widget class="QWidget" name="fbBlank">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>589</width>
+    <height>63</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QPushButton" name="btn_blankName">
+   <property name="geometry">
+    <rect>
+     <x>20</x>
+     <y>20</y>
+     <width>41</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>A</string>
+   </property>
+  </widget>
+  <widget class="QTextEdit" name="tedt_blank">
+   <property name="geometry">
+    <rect>
+     <x>80</x>
+     <y>10</y>
+     <width>431</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="contextMenuPolicy">
+    <enum>Qt::NoContextMenu</enum>
+   </property>
+   <property name="placeholderText">
+    <string>请输入答案</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 66 - 0
question/question.pri

@@ -0,0 +1,66 @@
+FORMS += \
+    $$PWD/addPic.ui \
+    $$PWD/audioPlay.ui \
+    $$PWD/changeQuestion.ui \
+    $$PWD/choiceQuesiton.ui \
+    $$PWD/fbBlank.ui \
+    $$PWD/fbFillBlankBody.ui \
+    $$PWD/fillBlank.ui \
+    $$PWD/optionBody.ui \
+    $$PWD/qaaBlank.ui \
+    $$PWD/question.ui \
+    $$PWD/questionAndAnswer.ui \
+    $$PWD/questionBody.ui \
+    $$PWD/questionOption.ui \
+    $$PWD/questionSet.ui \
+    $$PWD/standardAnswer.ui \
+    $$PWD/wPictureItem.ui \
+    $$PWD/wPictureList.ui \
+    $$PWD/widgetViewPhoto.ui \
+    $$PWD/wxAnswer.ui
+
+HEADERS += \
+    $$PWD/CBaseWidget.h \
+    $$PWD/addPic.h \
+    $$PWD/audioPlay.h \
+    $$PWD/changeQuestion.h \
+    $$PWD/choiceQuesiton.h \
+    $$PWD/fbBlank.h \
+    $$PWD/fbFillBlankBody.h \
+    $$PWD/fillBlank.h \
+    $$PWD/optionBody.h \
+    $$PWD/paperDef.h \
+    $$PWD/qaaBlank.h \
+    $$PWD/question.h \
+    $$PWD/questionAndAnswer.h \
+    $$PWD/questionBody.h \
+    $$PWD/questionOption.h \
+    $$PWD/questionSet.h \
+    $$PWD/standardAnswer.h \
+    $$PWD/wPictureItem.h \
+    $$PWD/wPictureList.h \
+    $$PWD/widgetViewPhoto.h \
+    $$PWD/wxAnswer.h
+
+SOURCES += \
+    $$PWD/CBaseWidget.cpp \
+    $$PWD/addPic.cpp \
+    $$PWD/audioPlay.cpp \
+    $$PWD/changeQuestion.cpp \
+    $$PWD/choiceQuesiton.cpp \
+    $$PWD/fbBlank.cpp \
+    $$PWD/fbFillBlankBody.cpp \
+    $$PWD/fillBlank.cpp \
+    $$PWD/optionBody.cpp \
+    $$PWD/paperDef.cpp \
+    $$PWD/qaaBlank.cpp \
+    $$PWD/question.cpp \
+    $$PWD/questionAndAnswer.cpp \
+    $$PWD/questionBody.cpp \
+    $$PWD/questionOption.cpp \
+    $$PWD/questionSet.cpp \
+    $$PWD/standardAnswer.cpp \
+    $$PWD/wPictureItem.cpp \
+    $$PWD/wPictureList.cpp \
+    $$PWD/widgetViewPhoto.cpp \
+    $$PWD/wxAnswer.cpp