#include "separateanalysis.h" #include "ui_separateanalysis.h" #include #include #include #include #include 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 ranks; for(int i=0;irowCount();++i){ ranks.append(m_model->item(i,9)->text().toInt()); if(i >= 6){ // 先统计排名计数 int cntBig=0, cntSmall=0; for(int j=0;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 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()<<"查询到行数:"<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 &names) { // 会卡顿,需要研究一下 ui->comboBox_name->clear(); for(auto key:names.values()){ ui->comboBox_name->addItem(key); } }