wumu
16 小时以前 8f4eb9a829d70a28c1d6dff8baa1034e57878c56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include "separateanalysis.h"
#include "ui_separateanalysis.h"
 
#include <QDateTime>
#include <QMessageBox>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
 
SeparateAnalysis::SeparateAnalysis(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::SeparateAnalysis)
{
    ui->setupUi(this);
 
    m_model = new QStandardItemModel(this);
    m_model->setColumnCount(11); // 设置10列
    QStringList labels;
    labels<<"股票名字"<<"股票代号"<<"总市值(亿)"<<"涨跌幅(%)"<<"收盘价"<<"成交额(亿)"<<"成交量(手)"<<"换手率(%)"<<"市盈率"<<"交易额排名"<<"交易时间"<<"排名趋势变化";
    m_model->setHorizontalHeaderLabels(labels); // 设置模型的列标签名
    ui->tableView->setModel(m_model);
 
    initMySQL(); // 初始化数据库
}
 
SeparateAnalysis::~SeparateAnalysis()
{
    delete ui;
}
 
void SeparateAnalysis::calcRankChange()
{
 
}
 
void SeparateAnalysis::calcWindowRank()
{
    // 滑动窗口排名,6个要2+的前100
    QVector<int> ranks;
    for(int i=0;i<m_model->rowCount();++i){
        ranks.append(m_model->item(i,9)->text().toInt());
        if(i >= 6){
            // 先统计排名计数
            int cntBig=0, cntSmall=0;
            for(int j=0;j<ranks.size();++j){
                if(ranks.at(j) > 100){
                    cntBig++;
                }else{
                    cntSmall++;
                }
            }
            // 统计对比
            if(cntSmall == 2 && ranks.back() <= 100){
                // 将当前6个元素定为符合的窗口,背景色设置为紫色
                for(int k=0;k<6;++k){
                    m_model->item(i-k,9)->setData(QColor("red"),Qt::BackgroundColorRole);
                }
            }
 
            // 清除窗口第一个元素
            ranks.pop_front();
 
 
        }
 
    }
 
}
 
void SeparateAnalysis::initMySQL()
{
    //添加一个数据库
      db=QSqlDatabase::addDatabase("QMYSQL");    //括号内要写出数据库的类型
      //设置数据库
      db.setHostName("127.0.0.1"); //设置数据库的主机ip
      //设置数据库的用户名
      db.setUserName("root");
      //设置数据库的密码
      db.setPassword("root");    //这个就是安装MySQL时设置的密码
      //设置数据库的名字
      db.setDatabaseName("stock_plan");
      //打开数据库(已经安装过mysql驱动了)
      if(db.open()==false){
          QMessageBox::warning(this,"waring",db.lastError().text());
      }else{
          qDebug()<<"SeparateAnalysis mysql conn ok";
      }
}
void SeparateAnalysis::on_pushButton_search_clicked()
{
    ui->label_status->setText("正在查询,请稍等...");
    qint64 tt = QDateTime::currentMSecsSinceEpoch();
    QString name = ui->comboBox_name->currentText();
    QString sql = QString("select name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank,time_trade from stock_day_info where name = '%1'").arg(name);
 
    QSqlQuery que(db);
    int rows = 0;
    if(que.exec(sql)){
        qDebug()<<"select ok";
        m_model->setRowCount(0); // 重置模型行数
        //int rows = 0;
        int rank_val = 0;
        while (que.next()) {
            QString name = que.value(0).toString();
            QString code = que.value(1).toString();
            QString market_capital = QString::number(que.value(2).toDouble()/100000000);
            QString percent = que.value(3).toString();
            QString close = que.value(4).toString();
            QString amount = QString::number(que.value(5).toDouble()/100000000);
            QString volume = que.value(6).toString();
            QString turnover_rate = que.value(7).toString();
            QString pe_ttm = que.value(8).toString();
            QString amount_rank = que.value(9).toString();
            QString time_trade = que.value(10).toString();
 
            //m_modelDatas.append({name,code,market_capital,percent,close,amount,volume,turnover_rate,pe_ttm,amount_rank});
 
            QList<QStandardItem*> items;
            items.append(new QStandardItem(name));
            items.append(new QStandardItem(code));
            items.append(new QStandardItem(market_capital));
            //items.append(new QStandardItem(percent));
            QStandardItem *percentItem =  new QStandardItem(percent);
            if(percent.toDouble() > 0){
                percentItem->setData(QColor("red"),Qt::DecorationRole); // 添加一个装饰的颜色为红色
                percentItem->setData(QColor("red"),Qt::TextColorRole);  // 将字体颜色设置为红色
                items.at(0)->setData(QColor("red"),Qt::TextColorRole);  // 将股票名字设置为红色
             }
            else if(percent.toDouble() < 0){
                percentItem->setData(QColor("green"),Qt::BackgroundColorRole);
                items.at(0)->setData(QColor("green"),Qt::TextColorRole);
            }
            items.append(percentItem);
 
            items.append(new QStandardItem(close));
            items.append(new QStandardItem(amount));
            items.append(new QStandardItem(volume));
            items.append(new QStandardItem(turnover_rate));
            items.append(new QStandardItem(pe_ttm));
            items.append(new QStandardItem(amount_rank));
            items.append(new QStandardItem(time_trade));
            if(rank_val != 0){
                double rank_rate = 1 - (amount_rank.toDouble()/rank_val);
                //items.append(new QStandardItem(QString::number(rank_rate)));
                rank_val = amount_rank.toInt();
                QStandardItem * amount_rank_item = new QStandardItem(QString::number(rank_rate));
                if(rank_rate > 0.9){
                    amount_rank_item->setData(QColor("red"),Qt::BackgroundColorRole);
                }
                items.append(amount_rank_item);
 
            }
            if(rank_val == 0 && amount_rank.toInt() != 0){
                rank_val = amount_rank.toInt();
            }
            m_model->appendRow(items);
            rows++;
        }
        qDebug()<<"查询到行数:"<<rows;
 
    }else{
        qDebug()<<"select fail"<<que.lastError().text();
    }
 
    qint64 need = QDateTime::currentMSecsSinceEpoch()-tt;
    ui->label_status->setText(QString("耗时:%1 毫秒,查询完成.条数: %2").arg(QString::number(need)).arg(QString::number(rows)));
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    // 滑动窗口统计
    calcWindowRank();
 
}
 
void SeparateAnalysis::setNamesToCombo(QMap<QString, QString> &names)
{
    // 会卡顿,需要研究一下
    ui->comboBox_name->clear();
    for(auto key:names.values()){
        ui->comboBox_name->addItem(key);
    }
}