#include "positionmanagement.h" #include "ui_positionmanagement.h" #include #include #include #include #include #include #include #include PositionManagement::PositionManagement(QWidget *parent): QMainWindow(parent), ui(new Ui::PositionManagement) { ui->setupUi(this); m_modelAll = new QStandardItemModel(this); m_modelShort = new QStandardItemModel(this); m_modelMid = new QStandardItemModel(this); m_modelLong = new QStandardItemModel(this); QStringList labels; // 14列 labels<<"id"<<"股票"<<"code"<<"入池时间"<<"入池价格"<<"购买时间"<<"购买价格" <<"卖出时间"<<"卖出价格"<<"入池收益"<<"买入收益"<<"卖出收益"<<"类型"<<"状态"<<"当前价格"; m_modelAll->setHorizontalHeaderLabels(labels); m_modelShort->setHorizontalHeaderLabels(labels); m_modelMid->setHorizontalHeaderLabels(labels); m_modelLong->setHorizontalHeaderLabels(labels); ui->tableView_all->setModel(m_modelAll); ui->tableView_short->setModel(m_modelShort); ui->tableView_mid->setModel(m_modelMid); ui->tableView_long->setModel(m_modelLong); // 初始化数据库 initMySQL(); // 添加股票信息相关 m_addDlg = new QDialog(this); m_addDlg->setWindowTitle("添加股票到仓位池"); QVBoxLayout *vb = new QVBoxLayout(m_addDlg); QStringList placetext; placetext<<"输入股票名字"<<"输入股票代号"<<"输入价格"; for(int i=0;i<3;++i){ QLineEdit *lt = new QLineEdit(this); lt->setPlaceholderText(placetext.at(i)); vb->addWidget(lt); m_lineEdits.append(lt); } QComboBox *comBox = new QComboBox(this); comBox->addItem("短线"); comBox->addItem("中线"); comBox->addItem("长线"); vb->addWidget(comBox); QPushButton *addBtn = new QPushButton("添加",this); vb->addWidget(addBtn); // 使用匿名函数来实现槽 connect(addBtn,&QPushButton::clicked,this,[=]{ QString name = m_lineEdits.at(0)->text(); QString code = m_lineEdits.at(1)->text(); QString price = m_lineEdits.at(2)->text(); QString type = comBox->currentText(); qDebug()<addAction("查询最新价格"); m_menu->addAction("买入当前股票"); m_menu->addAction("卖出当前股票"); // 连接菜单动作和槽 connect(m_menu->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(searchPriceAction())); connect(m_menu->actions().at(1),SIGNAL(triggered(bool)),this,SLOT(buyStockAction())); connect(m_menu->actions().at(2),SIGNAL(triggered(bool)),this,SLOT(saleStockAction())); this->setContextMenuPolicy(Qt::CustomContextMenu); // 设定菜单策略 ui->tableView_all->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableView_short->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableView_mid->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableView_long->setContextMenuPolicy(Qt::CustomContextMenu); // 和窗口连接,在整个窗口中都可以右击显示菜单 // connect(this,&PositionManagement::customContextMenuRequested,this,[=](QPoint p){ // //m_menu->exec(QCursor::pos()); // 方式1 // //m_menu->exec(this->mapToGlobal(p)); // 方式2,如果是子部件,容易坐标偏移 // m_menu->popup(QCursor::pos()); // 换一个方式3 也可以 // }); // 和每个视图连接,只在视图中显示菜单 connect(ui->tableView_all,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint))); connect(ui->tableView_short,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint))); connect(ui->tableView_mid,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint))); connect(ui->tableView_long,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenu(QPoint))); } PositionManagement::~PositionManagement() { delete ui; } void PositionManagement::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()<<"mysql conn ok"; } } void PositionManagement::on_pushButton_add_clicked() { m_addDlg->show(); } void PositionManagement::on_pushButton_refresh_clicked() { m_modelAll->setRowCount(0); m_modelShort->setRowCount(0); m_modelMid->setRowCount(0); m_modelLong->setRowCount(0); QString sql = "select * from position_pool"; QSqlQuery que(db); if(que.exec(sql)){ qDebug()<<"查询成功"; qDebug()<<"size:"< items; QList items_short; QList items_mid; QList items_long; for(int i=0;i<15;++i){ qDebug()<appendRow(items); if(items.at(12)->text() == "短线"){ m_modelShort->appendRow(items_short); }else if(items.at(12)->text() == "中线"){ m_modelMid->appendRow(items_mid); }else{ m_modelLong->appendRow(items_long); } } }else{ qDebug()<<"查询失败"; } } void PositionManagement::showMenu(QPoint p) { m_curPoint = p; // 记录当前坐标--子部件内的坐标,刚好可用,不用再转换了 m_curView = (QTableView*)sender(); // 记录被点击的视图,用来取索引--模型--数据 // qDebug()<exec(this->mapFromGlobal(p)); // 方式1,容易坐标跑偏,特别是子部件显示菜单时 m_menu->exec(QCursor::pos()); } void PositionManagement::searchPriceAction() { qDebug()<<"查询最新价格"<indexAt(m_curPoint); if(index.row() == -1) return; // 防止异常 QStandardItemModel * curModel = (QStandardItemModel*)index.model(); int row = index.row(); QString id = curModel->item(row,0)->text(); QString name = curModel->item(row,1)->text(); QString code = curModel->item(row,2)->text(); QString price = curModel->item(row,14)->text(); QString state = curModel->item(row,13)->text(); qDebug()<indexAt(m_curPoint); if(index.row() == -1) return; // 防止异常 QStandardItemModel * curModel = (QStandardItemModel*)index.model(); int row = index.row(); QString id = curModel->item(row,0)->text(); QString name = curModel->item(row,1)->text(); QString code = curModel->item(row,2)->text(); QString price = curModel->item(row,14)->text(); QString state = curModel->item(row,13)->text(); QString buy_price = curModel->item(row,6)->text(); qDebug()<