From d3dd07158c3041727e56f40c9ba2dbe9d414ae2a Mon Sep 17 00:00:00 2001
From: wumu <mayi@mayi.com>
Date: 星期日, 19 一月 2025 23:53:29 +0800
Subject: [PATCH] 0119

---
 regularinvestment.ui  |  276 +++++++++++++++++++++++++++
 clientmainwindow.h    |    3 
 regularinvestment.h   |   51 +++++
 clientmainwindow.cpp  |    7 
 getstocklist.cpp      |   10 +
 getstocklist.h        |    3 
 regularinvestment.cpp |  205 ++++++++++++++++++++
 stock_plan.pro        |    9 
 8 files changed, 561 insertions(+), 3 deletions(-)

diff --git a/clientmainwindow.cpp b/clientmainwindow.cpp
index 3c4e54b..6a7a785 100644
--- a/clientmainwindow.cpp
+++ b/clientmainwindow.cpp
@@ -35,10 +35,17 @@
     m_showInfoMess = new ShowInfoMessage(this);
     ui->tabWidget->addTab(m_showInfoMess,"淇℃伅鎻愮ず");
 
+    m_regular = new RegularInvestment(this);
+    ui->tabWidget->addTab(m_regular,"瀹氭姇璁剧疆");
+
+
     // 鍏宠仈涓�涓�2涓晫闈㈢殑淇″彿鍜屾Ы锛岀敤鏉ヤ紶閫掑浘琛ㄦ墍闇�鐨勬暟鎹強灞曠ず
     connect(m_getStockList,SIGNAL(sendChartData(QLineSeries*)),m_stockPolicy,SLOT(showNewStockData(QLineSeries*)));
     connect(m_getStockList,SIGNAL(sendChartData(QSplineSeries*)),m_stockPolicy,SLOT(showNewStockData(QSplineSeries*)));
 
     connect(m_getStockList,SIGNAL(sendInfoMess(QString)),m_showInfoMess,SLOT(showInfo(QString)));
 
+    connect(m_regular,SIGNAL(getClosePriceSignal(QString)),m_getStockList,SLOT(getLastClosePrice(QString)));
+    connect(m_getStockList,SIGNAL(sendClosePrice(QString,QString)),m_regular,SLOT(showClosePrice(QString,QString)));
+
 }
diff --git a/clientmainwindow.h b/clientmainwindow.h
index dbd9395..cc26bea 100644
--- a/clientmainwindow.h
+++ b/clientmainwindow.h
@@ -6,6 +6,8 @@
 #include "stockpolicy.h"
 #include "leadingcompany.h"
 #include "showinfomessage.h"
+#include "regularinvestment.h"
+
 
 namespace Ui {
 class ClientMainWindow;
@@ -27,6 +29,7 @@
     StockPolicy *m_stockPolicy;
     LeadingCompany *m_leadingCom; // 榫欏ご鍏徃
     ShowInfoMessage *m_showInfoMess; // 鏄剧ず淇℃伅鎻愮ず
+    RegularInvestment *m_regular; // 瀹氭姇璁剧疆
 
 
 };
diff --git a/getstocklist.cpp b/getstocklist.cpp
index f7732ca..a0b32c2 100644
--- a/getstocklist.cpp
+++ b/getstocklist.cpp
@@ -915,3 +915,13 @@
     m_manager.get(m_request);
 
 }
+
+void GetStockList::getLastClosePrice(QString name)
+{
+    for(int i=0;i<m_model->rowCount();++i){
+        if(m_model->item(i,0)->text() == name){
+            QString closePrice = m_model->item(i,5)->text();
+            emit sendClosePrice(name,closePrice);
+        }
+    }
+}
diff --git a/getstocklist.h b/getstocklist.h
index 731aa0d..25ba614 100644
--- a/getstocklist.h
+++ b/getstocklist.h
@@ -43,6 +43,7 @@
     void sendChartData(QLineSeries*);  // 鎶樼嚎
     void sendChartData(QSplineSeries*);  // 鏇茬嚎
     void sendInfoMess(QString); // 鍙戦�佹秷鎭彁绀�
+    void sendClosePrice(QString,QString); // 鍙戦�佹渶鏂扮殑浠锋牸锛氬悕瀛椼�佷环鏍�
 
 private slots:
     void on_pushButton_get_clicked();
@@ -66,6 +67,8 @@
 
     void on_pushButton_industry_clicked();
 
+    void getLastClosePrice(QString name); // 閫氳繃鍚嶅瓧鑾峰彇鑲$エ浠锋牸妲�
+
 private:
     Ui::GetStockList *ui;
     // 杩�2涓敤浜庣埇鍙栨暟鎹殑
diff --git a/regularinvestment.cpp b/regularinvestment.cpp
new file mode 100644
index 0000000..dc02488
--- /dev/null
+++ b/regularinvestment.cpp
@@ -0,0 +1,205 @@
+锘�#include "regularinvestment.h"
+#include "ui_regularinvestment.h"
+#include <QDebug>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <qfile.h>
+#include <qnetworkcookie.h>
+#include <qnetworkreply.h>
+#include <QDebug>
+
+RegularInvestment::RegularInvestment(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::RegularInvestment)
+{
+    ui->setupUi(this);
+    ui->statusbar->hide();
+    ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());
+
+    m_nameCodes["闀挎睙鐢靛姏"]= "SH600900";
+    m_nameCodes["涓浗绁炲崕"]= "SH601088";
+    m_nameCodes["涓浗鐢典俊"]= "SH601728";
+    m_nameCodes["涓浗绉诲姩"]= "SH600941";
+
+
+    // 澶勭悊鏁版嵁鐖彇鐨勬搷浣�
+    // 妯℃嫙娴忚鍣ㄧ殑鍙傛暟
+    QString userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36";
+    m_cookie = "__utma=1.731742638.1647403301.1699341909.1700229030.32; device_id=196eef62baf016c7d95a22752d9bdbab; smidV2=20240414233939e95389ecf7ecd2f4d08524ce770aacd500753aa68e9640320; s=c611de27gr; cookiesu=651726298794778; xq_a_token=220b0abef0fac476d076c9f7a3938b7edac35f48; xqat=220b0abef0fac476d076c9f7a3938b7edac35f48; xq_r_token=1d46f0ed628506486164e5055a4993f9b54b2f4c; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcyOTIxMjc4NCwiY3RtIjoxNzI3NDkwOTU3MjA0LCJjaWQiOiJkOWQwbjRBWnVwIn0.C_GmKEhTaaioDMLWkgZyMXDl4duYEVmsdJHsTi7gbcNz0Tohc-uxHsaw0yBT5k-qmbrJ_RaLMCSxy06v14-R3dwL-MsiKRHxHa5qvQZN4BjEgvPRkqqvPgE_fkPLte8qQOEgd5iVkhr-4mjip0-9WCeXYiH7DygxFOBXGlgoPtpPzAtOTm5TWJmXh0ipDsIZxfNOl8jipXYaIdkv_kqLul5gqiBi5qqnwONDa24Zx-Kvpm8ySWiPFBLzZBqTuRBs4oKAMpSdOiYGLVL7dcSDDZyWqAexmrN4f19hkmd6gBHL4dCczRMDGYc1e98sQtlbZ5lgeEuuM24jjcuwCxsxXQ; u=651726298794778; Hm_lvt_1db88642e346389874251b5a1eded6e3=1727099939,1727251802,1727488707,1727491020; HMACCOUNT=1628106D67895387; acw_tc=2760828017275244258732552e9880f861be6db0c40facbdd5f223490decc2; acw_sc__v2=66f7ee8290dc3f63112948801ef331b8c97ccb35; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1727524485; .thumbcache_f24b8bbe5a5934237bbc0eda20c1b6e7=t00N841S/BEpxTGOoJrbm0blWik12om0ew/whcq/V2DNtyEA8um7J+yzeGOli+6iP/TrvrH0YKH2kHlsmDb5EQ%3D%3D; ssxmod_itna=YqAOBKYve+x0ODfxBcDB4DKM7RtAA4454DkDIEC+GAqGNK3DZDiqAPGhDC8RzeL4Ko7+e2aeQvSeopd5pYDk0Ge5TB0PIjaIDB3DEx06TCCQxiiSDCeDIDWeDiDG4Gm4qGtDpxG=DjDytZ9TtDm4GWGqDmDGYBWqDgDYQDGwIXD7QDIqtW07tQDDNQKpAKDiYeHlL5uMRMtOrK7DtDjdTD/3+kZCbCcPwVFeFO=nPcDB6wxBjZRq00Un+g4mNqLYf4IDAxQuYKtgheYYoAfDhTKhhLSGx4tGY4+GDKSiMS2DDAIvdKeD; ssxmod_itna2=YqAOBKYve+x0ODfxBcDB4DKM7RtAA4454DkDIEC+GDA69mqD/YttDFhxMltFKApT7bCMH+bytp7GQQyCbBWukeAF3+jxeN2wLjbQAFcdwbeNeoohjQ4qtEnLg4TKyX2LqVL=CGaV=GqZZqbDby8DFnFbgWiZEH8zoBzBCbzqWeqwoPq7/TpL=gIRY8sVhEpnWWHQU8sz+S8=+8oRerHq0wtQnSzyQDK7Dmvr3a+VY7fezRmxKF=bDeqexYUbuuzw2eR3In9evW6tzHbQY6vp=AIOUc9l6vc0vOl9plD6D07zGGQ41uxpii2Y5s7KvYQDWGYExD7=DYKKeD==";
+    QByteArray cookieByte = m_cookie.toUtf8();
+    QList<QNetworkCookie> list;
+    list.push_back(QNetworkCookie(cookieByte));
+
+    QVariant var;
+    var.setValue(list);
+    // 璁剧疆瑕佽闂殑缃戝潃
+    m_request.setUrl(QUrl("https://xueqiu.com/?md5__1038=QqGxcDnDyiitnD05o4%2Br%3Di%3De0KDtYqCDRWOoD"));
+    // 璁剧疆璇锋眰澶达紝鐢ㄦ埛浠g悊锛岀敤鏉ユā鎷熸祻瑙堝櫒
+    m_request.setHeader(QNetworkRequest::UserAgentHeader,userAgent);
+    // 璁剧疆cookie
+    //m_request.setHeader(QNetworkRequest::CookieHeader, var);
+
+    // 鏌ョ湅manager閮芥敮鎸佸摢浜涘崗璁�
+    qDebug()<<"瀹氭姇绠$悊--鏀寔鐨勫崗璁�:"<<m_manager.supportedSchemes();
+    // 鍏宠仈淇″彿妲斤紝褰撹姹傜鐞嗗璞″畬鍏ㄦ墦寮�缃戦〉涔嬪悗锛屼細灏嗘暟鎹粰妲藉嚱鏁板鐞�
+    connect(&m_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(showAplyData(QNetworkReply*)));
+
+    // 鍘昏姹傞椤�
+    m_manager.get(m_request);
+
+    // 澶勭悊妯″瀷
+    m_model = new QStandardItemModel(0,7,this);
+    ui->tableView->setModel(m_model);
+    QStringList labels;
+    labels<<"鏃堕棿"<<"涔板叆浠锋牸"<<"鏁伴噺(鎵�)"<<"鎵�闇�閲戦(鍏�)"<<"鏈�鏂颁环鏍�"<<"鐩堜簭姣�"<<"鐩堜簭閲戦";
+    m_model->setHorizontalHeaderLabels(labels);
+
+
+}
+
+RegularInvestment::~RegularInvestment()
+{
+    delete ui;
+}
+
+void RegularInvestment::showClosePrice(QString name, QString closePrice)
+{
+    qDebug()<<name<<closePrice;
+    ui->label_closePrice->setText(closePrice);
+
+    on_lineEdit_2_returnPressed(); // 鍒锋柊鎬讳环
+}
+
+void RegularInvestment::on_comboBox_currentIndexChanged(const QString &arg1)
+{
+
+    qDebug()<<"褰撳墠鑲$エ涓�:"<<arg1;
+    emit getClosePriceSignal(arg1);
+
+}
+
+void RegularInvestment::on_lineEdit_2_returnPressed()
+{
+    qDebug()<<ui->lineEdit_2->text();
+    double price = ui->lineEdit_2->text().toInt()* 100 * ui->label_closePrice->text().toDouble();
+    ui->lineEdit->setText(QString::number(price));
+}
+
+void RegularInvestment::on_pushButton_clicked()
+{
+    m_model->setRowCount(0);
+    // 鎸夋寚瀹氭椂闂村紑濮嬶紝寰�鍚庨�掑鏈堟潵鎶曞叆锛岃繘琛岀粺璁�
+    qDebug()<<"鎵ц瀹氭姇鍥炴祴";
+//    emit sendInfoMess("<font size=12 color=pink>鎵цMACD绛栫暐 </font>");
+//    int curRow = ui->tableView->currentIndex().row();
+//    QString symbol = m_model->item(curRow,1)->text();
+
+    QString name = ui->comboBox->currentText();
+    QString symbol = m_nameCodes[name];
+    qint64 begin = QDateTime::currentMSecsSinceEpoch(); // 鍙栧綋鍓嶆椂闂存埑
+    int numsCnt = 1;
+    QString period = ui->comboBox_2->currentText();
+    QString type = period == "鏈�" ? "month" : "year" ;
+    QDateTime beginDate = ui->dateTimeEdit->dateTime(); // 鍙互鎸夋湀澧炲姞鏉ユ眰浠锋牸锛岀劧鍚庡拰鏈�鏂扮殑浠锋牸姣旇緝鐪嬫敹鐩婃儏鍐�
+    while (beginDate.toMSecsSinceEpoch() <= begin) {
+        qint64 start = beginDate.toMSecsSinceEpoch();
+        QString urlStr = QString("https://stock.xueqiu.com/v5/stock/chart/kline.json?symbol=%1&begin=%2&period=%3&type=before&count=-%4&indicator=kline,macd").arg(symbol).arg(start).arg(type).arg(numsCnt);
+        qDebug()<<urlStr;
+        qDebug()<<"褰撳墠鑲$エ:"<<symbol<<name;
+        // 涓嬩竴姝ュ氨鏄牴鎹畊rl璇锋眰鍒扮殑鏁版嵁锛岃繘琛屽垎鏋�
+        //m_menuIndex = 3; // 绗洓涓彍鍗曢」
+        m_request.setUrl(QUrl(urlStr));
+        m_manager.get(m_request);
+        beginDate = beginDate.addMonths(1); // 澧炲姞涓�涓湀
+    }
+
+
+}
+
+void RegularInvestment::showAplyData(QNetworkReply *reply)
+{
+    qDebug()<<"鏀跺埌鍝嶅簲";
+    // 灏嗗搷搴旂殑鏁版嵁锛屼竴鎶婅鍙栧畬锛屾斁鍒板瓧鑺傛暟缁勯噷闈㈡潵澶勭悊
+    QByteArray buffer = reply->readAll();
+
+    // 灏嗘暟鎹啓鍒版枃浠朵腑锛屾柟渚胯瀵熸暟鎹唴瀹�
+    QFile file("data_dingtou.txt");
+    file.open(QIODevice::ReadWrite | QIODevice::Text);
+    QTextStream out(&file);
+    out << buffer << endl;
+    file.close();
+
+    // 涓嬮潰浣跨敤JSON杩涜鏁版嵁澶勭悊
+    if(reply->url().toString().indexOf("https://xueqiu.com/") != -1){
+        qDebug()<<"鍙戠幇棣栭〉url";
+        qDebug()<<buffer;
+
+    }else if(reply->url().toString().indexOf("https://stock.xueqiu.com/v5/stock/chart/kline.json") != -1){
+        qDebug()<<"鏌ョ湅涓偂鎯呭喌:";
+        getOneStock(buffer);
+
+    }
+}
+
+/*  瑕佸鐞嗙殑鍗曚釜鑲$エ鐨勬牸寮忓涓�
+{"data":{" ":"SH601127","column":["timestamp","volume","open","high","low","close","chg","percent","turnoverrate","amount","volume_post","amount_post"],
+"item":[[1680192000000,592214010,37.57,41.56,35.63,37.85,0.2,0.53,50.63,2.3075281252E10,0,0.0],
+[1682611200000,355174985,36.6,36.6,28.61,29.52,-8.33,-22.01,27.0,1.1568002446E10,0,0.0],
+[1685462400000,345031667,29.51,30.1,25.27,25.78,-3.74,-12.67,23.04,9.442101926E9,0,0.0],
+[1688054400000,1217980960,25.6,42.19,24.75,36.77,10.99,42.63,81.24,4.2515733378E10,0,0.0],
+[1688572800000,427585117,37.5,47.3,37.06,46.62,9.85,26.79,28.37,1.8368604411E10,0,0.0]]},"error_code":0,"error_description":""}
+
+*/
+// 鍗曚釜鑲$エ鐨� JSON鏍煎紡澶勭悊
+void RegularInvestment::getOneStock(QByteArray &buffer)
+{
+    QJsonDocument jd = QJsonDocument::fromJson(buffer);
+    if(jd.isObject()){
+        QJsonObject jObject = jd.object();
+        QJsonArray jArr = jObject.value("data").toObject().value("item").toArray(); // 閫氳繃閿�煎鍙栧��
+        int cnt = jArr.count();
+        qDebug()<<"鏁扮粍size:"<<cnt;
+        QString symbol = jObject.value("data").toObject().value("symbol").toString();
+        QString code = symbol; // 鑲$エ浠e彿
+        qDebug()<<"瀹氭姇:"<<code<<symbol;
+
+        for(int i=0;i<cnt;++i){
+            qint64 timestamp = jArr.at(i).toArray().at(0).toVariant().toLongLong();
+            double close = jArr.at(i).toArray().at(5).toVariant().toDouble();
+            long long volume = jArr.at(i).toArray().at(1).toVariant().toLongLong()/100;
+
+            long long amount = jArr.at(i).toArray().at(9).toVariant().toLongLong()/100000000;
+            QString curDateTime = QDateTime::fromMSecsSinceEpoch(timestamp).toString("yyyy-MM-dd");
+            qDebug()<<curDateTime<<close<<volume<<amount;
+
+            // 澶勭悊鏁版嵁淇濆瓨鍒版ā鍨嬩腑
+            // labels<<"鏃堕棿"<<"涔板叆浠锋牸"<<"鏁伴噺(鎵�)"<<"鎵�闇�閲戦(鍏�)"<<"鏈�鏂颁环鏍�"<<"鐩堜簭姣�"<<"鐩堜簭閲戦";
+            double lastClose = ui->label_closePrice->text().toDouble();
+            int row = m_model->rowCount();
+            m_model->setRowCount(row+1);
+            m_model->setItem(row,0,new QStandardItem(curDateTime));
+            m_model->setItem(row,1,new QStandardItem(QString::number(close)));
+            m_model->setItem(row,2,new QStandardItem(ui->lineEdit_2->text()));
+            m_model->setItem(row,3,new QStandardItem(QString::number(close * ui->lineEdit_2->text().toInt()*100)));
+            m_model->setItem(row,4,new QStandardItem(ui->label_closePrice->text()));
+            m_model->setItem(row,5,new QStandardItem(QString::number((lastClose-close)/close)));
+            m_model->setItem(row,6,new QStandardItem(QString::number(close * ui->lineEdit_2->text().toInt()*100 *(lastClose-close)/close)));
+
+
+        }
+    }
+}
+
+void RegularInvestment::on_pushButton_sum_clicked()
+{
+    double allBuy = 0;
+    double allWin = 0;
+    for(int i=0;i<m_model->rowCount();++i){
+        allBuy += m_model->item(i,3)->text().toDouble();
+        allWin += m_model->item(i,6)->text().toDouble();
+    }
+    ui->label_buyAll->setText(QString::number(allBuy));
+    ui->label_winAll->setText(QString::number(allWin));
+    ui->label_allRate->setText(QString::number((allWin/allBuy)*100));
+}
diff --git a/regularinvestment.h b/regularinvestment.h
new file mode 100644
index 0000000..2b8b1e6
--- /dev/null
+++ b/regularinvestment.h
@@ -0,0 +1,51 @@
+锘�#ifndef REGULARINVESTMENT_H
+#define REGULARINVESTMENT_H
+
+#include <QMainWindow>
+#include <QMap>
+#include <qnetworkaccessmanager.h>
+#include <qnetworkrequest.h>
+#include <QStandardItemModel>
+
+namespace Ui {
+class RegularInvestment;
+}
+
+class RegularInvestment : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit RegularInvestment(QWidget *parent = 0);
+    ~RegularInvestment();
+
+signals:
+    void getClosePriceSignal(QString); // 鍙戝悕瀛楁嬁浠锋牸
+public slots:
+    void showClosePrice(QString name,QString closePrice);
+
+private slots:
+    void on_comboBox_currentIndexChanged(const QString &arg1);
+
+    void on_lineEdit_2_returnPressed();
+
+    void on_pushButton_clicked();
+
+    void showAplyData(QNetworkReply* reply);
+    void getOneStock(QByteArray &buffer);
+
+    void on_pushButton_sum_clicked();
+
+private:
+    Ui::RegularInvestment *ui;
+
+    QStandardItemModel *m_model;
+
+    QMap<QString,QString> m_nameCodes; // 鑲$エ鍚嶅瓧鍙婁唬鍙�
+
+    QNetworkRequest m_request; // 鐢ㄤ簬绠$悊璇锋眰澶寸殑
+    QString m_cookie; // 缂撳瓨
+    QNetworkAccessManager m_manager; // 鐢ㄤ簬绠$悊http璇锋眰鍙婂搷搴旂殑
+};
+
+#endif // REGULARINVESTMENT_H
diff --git a/regularinvestment.ui b/regularinvestment.ui
new file mode 100644
index 0000000..a186af7
--- /dev/null
+++ b/regularinvestment.ui
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>RegularInvestment</class>
+ <widget class="QMainWindow" name="RegularInvestment">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>856</width>
+    <height>627</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="0">
+     <widget class="QTabWidget" name="tabWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="tab">
+       <attribute name="title">
+        <string>瀹氭姇娴嬭瘯</string>
+       </attribute>
+       <layout class="QGridLayout" name="gridLayout_3">
+        <item row="0" column="0">
+         <widget class="QGroupBox" name="groupBox">
+          <property name="title">
+           <string>瀹氭姇璁剧疆</string>
+          </property>
+          <layout class="QGridLayout" name="gridLayout_2">
+           <item row="0" column="0">
+            <layout class="QHBoxLayout" name="horizontalLayout">
+             <item>
+              <widget class="QLabel" name="label">
+               <property name="text">
+                <string>涓偂</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QComboBox" name="comboBox">
+               <property name="editable">
+                <bool>true</bool>
+               </property>
+               <item>
+                <property name="text">
+                 <string>闀挎睙鐢靛姏</string>
+                </property>
+               </item>
+               <item>
+                <property name="text">
+                 <string>涓浗绁炲崕</string>
+                </property>
+               </item>
+               <item>
+                <property name="text">
+                 <string>涓浗鐢典俊</string>
+                </property>
+               </item>
+               <item>
+                <property name="text">
+                 <string>涓浗绉诲姩</string>
+                </property>
+               </item>
+              </widget>
+             </item>
+             <item>
+              <spacer name="horizontalSpacer">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_7">
+               <property name="text">
+                <string>鍛ㄦ湡:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QComboBox" name="comboBox_2">
+               <item>
+                <property name="text">
+                 <string>鏈�</string>
+                </property>
+               </item>
+               <item>
+                <property name="text">
+                 <string>骞�</string>
+                </property>
+               </item>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_6">
+               <property name="text">
+                <string>寮�濮嬫椂闂�:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QDateTimeEdit" name="dateTimeEdit">
+               <property name="calendarPopup">
+                <bool>true</bool>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_2">
+               <property name="text">
+                <string>鏈�鏂颁环</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_closePrice">
+               <property name="text">
+                <string>0</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item row="0" column="1" rowspan="2">
+            <widget class="QPushButton" name="pushButton">
+             <property name="text">
+              <string>寮�濮嬫祴璇�</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <item>
+              <widget class="QLabel" name="label_4">
+               <property name="text">
+                <string>瀹氭姇閲戦[鍏僝</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="lineEdit"/>
+             </item>
+            </layout>
+           </item>
+           <item row="2" column="0">
+            <layout class="QHBoxLayout" name="horizontalLayout_3">
+             <item>
+              <widget class="QLabel" name="label_5">
+               <property name="text">
+                <string>瀹氭姇浠芥暟[鎵媇</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="lineEdit_2">
+               <property name="text">
+                <string>1</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_10">
+               <property name="text">
+                <string>绱鎶曞叆(鍏�):</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_buyAll">
+               <property name="text">
+                <string>0</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_9">
+               <property name="text">
+                <string>绱鏀剁泭(鍏�):</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_winAll">
+               <property name="text">
+                <string>0</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_3">
+               <property name="text">
+                <string>鏀剁泭姣�(%):</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLabel" name="label_allRate">
+               <property name="text">
+                <string>0</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item row="2" column="1">
+            <widget class="QPushButton" name="pushButton_sum">
+             <property name="text">
+              <string>缁熻</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QTableView" name="tableView"/>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tab_2">
+       <attribute name="title">
+        <string>寮�濮嬪畾鎶�</string>
+       </attribute>
+       <widget class="QGroupBox" name="groupBox_2">
+        <property name="geometry">
+         <rect>
+          <x>20</x>
+          <y>30</y>
+          <width>801</width>
+          <height>111</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>瀹氭姇涔板叆</string>
+        </property>
+       </widget>
+       <widget class="QTableView" name="tableView_2">
+        <property name="geometry">
+         <rect>
+          <x>20</x>
+          <y>160</y>
+          <width>801</width>
+          <height>391</height>
+         </rect>
+        </property>
+       </widget>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>856</width>
+     <height>26</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/stock_plan.pro b/stock_plan.pro
index 29a0169..60cf5de 100644
--- a/stock_plan.pro
+++ b/stock_plan.pro
@@ -31,7 +31,8 @@
     leadingcompany.cpp \
     showinfomessage.cpp \
     customitem.cpp \
-    customsortproxymodel.cpp
+    customsortproxymodel.cpp \
+    regularinvestment.cpp
 
 HEADERS += \
         clientmainwindow.h \
@@ -40,11 +41,13 @@
     leadingcompany.h \
     showinfomessage.h \
     customitem.h \
-    customsortproxymodel.h
+    customsortproxymodel.h \
+    regularinvestment.h
 
 FORMS += \
         clientmainwindow.ui \
     getstocklist.ui \
     stockpolicy.ui \
     leadingcompany.ui \
-    showinfomessage.ui
+    showinfomessage.ui \
+    regularinvestment.ui

--
Gitblit v1.8.0