wumu
8 天以前 5a5fa5ab4c4f1af0d1aea6f4f09e7a1bb165bad4
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
#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::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);
 
}
 
void SeparateAnalysis::setNamesToCombo(QMap<QString, QString> &names)
{
    // 会卡顿,需要研究一下
    ui->comboBox_name->clear();
    for(auto key:names.values()){
        ui->comboBox_name->addItem(key);
    }
}