QPair 和 QList的嵌套使用(用两个评价来对另一个进行评价)

主要讲的是 QPair 和 QList的嵌套使用.

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QTableWidget>
#include <QSqlDatabase>
#include <QSqlQuery>

namespace Ui {
class MyWidget;
}

typedef QPair<QPoint, int> Data;    //((坐标X,坐标Y),值)
typedef QList<Data> DataList;
typedef QList<DataList> DataTable;

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::MyWidget *ui;

private:
    DataTable m_data;
    QStringList m_TYDJ;

    void createData(DataTable &data);
    void initDlg(QTableWidget *table,DataTable data,QStringList Header);
    bool strat(DataTable mdata, QString Field1, QString Field2, QString Field3, QStringList mx, QStringList my);
};

#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"

#include <QMessageBox>

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);       //去掉窗口问号
    this->setWindowTitle(QString::fromLocal8Bit("评价大雄"));

    QStringList header;
    header<<QString::fromLocal8Bit("静香的评价")<<QString::fromLocal8Bit("胖虎的评价");
    createData(m_data);
    initDlg(ui->tableWidget,m_data,header);
}

MyWidget::~MyWidget()
{
    delete ui;
}

void MyWidget::createData(DataTable &data)
{
    data.clear();
    DataList row1;
    row1<<Data(QPoint(1,1),1)<<Data(QPoint(2,1),1)<<Data(QPoint(3,1),2)<<Data(QPoint(4,1),3)<<Data(QPoint(5,1),3);

    DataList row2;
    row2<<Data(QPoint(1,2),1)<<Data(QPoint(2,2),1)<<Data(QPoint(3,2),2)<<Data(QPoint(4,2),3)<<Data(QPoint(5,2),4);

    DataList row3;
    row3<<Data(QPoint(1,3),1)<<Data(QPoint(2,3),2)<<Data(QPoint(3,3),3)<<Data(QPoint(4,3),4)<<Data(QPoint(5,3),5);

    DataList row4;
    row4<<Data(QPoint(1,4),1)<<Data(QPoint(2,4),2)<<Data(QPoint(3,4),4)<<Data(QPoint(4,4),5)<<Data(QPoint(5,4),5);

    DataList row5;
    row5<<Data(QPoint(1,5),1)<<Data(QPoint(2,5),3)<<Data(QPoint(3,5),4)<<Data(QPoint(4,5),5)<<Data(QPoint(5,5),5);

    data<<row1<<row2<<row3<<row4<<row5;
}

void MyWidget::initDlg(QTableWidget *table, DataTable data, QStringList Header)
{
    m_TYDJ.clear();
    m_TYDJ<<"1"<<"2"<<"3"<<"4"<<"5";

    int rowCount = 7;
    int colCount = 6;
    table->clear();
    table->setColumnCount(colCount);
    table->setRowCount(rowCount);
    table->horizontalHeader()->setDefaultSectionSize(100);
    table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);  //列宽自适应
    table->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);  //列宽自适应
    table->setShowGrid(true);
    table->setSelectionMode(QAbstractItemView::SingleSelection);  //单选
    table->setSelectionBehavior(QAbstractItemView::SelectRows);  //设置选择行为时每次选择一行
    table->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑
    table->setContextMenuPolicy(Qt::CustomContextMenu);
    table->setIconSize(QSize(100,25));
    table->horizontalHeader()->setStretchLastSection(true); //自动调整最后一列使与table右边界对齐
    table->horizontalHeader()->setVisible(false);   //水平表头不可见
    table->verticalHeader()->setVisible(false); //垂直表头不可见

    QMap<int, QString> mapLvToName;
    mapLvToName.clear();
    mapLvToName[1] = QString::fromLocal8Bit("高");
    mapLvToName[2] = QString::fromLocal8Bit("较高");
    mapLvToName[3] = QString::fromLocal8Bit("一般");
    mapLvToName[4] = QString::fromLocal8Bit("较低");
    mapLvToName[5] = QString::fromLocal8Bit("低");
    QMap<int,QString> mapGradeToSM;
    for(int i = 1;i<=5;++i)
        mapLvToName[i] = mapGradeToSM.contains(i)? mapGradeToSM[i] : mapLvToName[i];

    table->setItem(2,0,new QTableWidgetItem(mapLvToName[1]));
    table->setItem(3,0,new QTableWidgetItem(mapLvToName[2]));
    table->setItem(4,0,new QTableWidgetItem(mapLvToName[3]));
    table->setItem(5,0,new QTableWidgetItem(mapLvToName[4]));
    table->setItem(6,0,new QTableWidgetItem(mapLvToName[5]));
    for(int i=2;i<=6;++i)
    {
        table->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    }

    mapLvToName.clear();
    mapLvToName[1] = QString::fromLocal8Bit("好");
    mapLvToName[2] = QString::fromLocal8Bit("较好");
    mapLvToName[3] = QString::fromLocal8Bit("一般");
    mapLvToName[4] = QString::fromLocal8Bit("较差");
    mapLvToName[5] = QString::fromLocal8Bit("差");
    mapGradeToSM.clear();

    for(int i = 1;i<=5;++i)
        mapLvToName[i] = mapGradeToSM.contains(i)? mapGradeToSM[i] : mapLvToName[i];

    table->setItem(1,1,new QTableWidgetItem(mapLvToName[1]));
    table->setItem(1,2,new QTableWidgetItem(mapLvToName[2]));
    table->setItem(1,3,new QTableWidgetItem(mapLvToName[3]));
    table->setItem(1,4,new QTableWidgetItem(mapLvToName[4]));
    table->setItem(1,5,new QTableWidgetItem(mapLvToName[5]));
    for(int i=1;i<=5;++i)
    {
        table->item(1,i)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    }

    for(int i = 0 ; i <data.size();++i)
    {
        for(int k =0; k< data[i].size();++k)        //得到有几个DataList
        {
            int level = data[i][k].second;          //得到DataList的第k个值
            QString stext = QString("%1").arg(level);
            table->setItem(i+2,k+1,new QTableWidgetItem(stext));    //设置到表格上
            table->item(i+2,k+1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);  //设置相应单元格字体位置居中
        }
    }

    QString cheader = Header.first();
    QString rheader= Header.last();
    table->setSpan(0, 0, 2, 1);
    QTableWidgetItem *item = new QTableWidgetItem;
    item->setText(rheader);
    QFont f;            //设置两个标题的字体
    f = item->font();
    f.setBold(true);
    f.setPixelSize(16);
    item->setFont(f);
    table->setItem(0,0,item);
    table->item(0,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

    table->setSpan(0, 1, 1, 5);
    QTableWidgetItem *item1 = new QTableWidgetItem;
    item1->setText(cheader);
    f = item1->font();
    f.setBold(true);
    f.setPixelSize(16);
    item1->setFont(f);
    table->setItem(0,1,item1);
    table->item(0,1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
}

bool MyWidget::strat(DataTable data, QString Field1, QString Field2, QString Field3, QStringList mx, QStringList my)
{
    QString sql;
    QSqlQuery query(m_db_work);    //此处与sql链接的代码我省略了...
    for(int i = 0 ; i <data.size();++i)
    {
        for(int k =0; k< data[i].size();++k)
        {
            int level = data[i][k].second;
            int x = data[i][k].first.x();
            int y = data[i][k].first.y();
            sql = QString("update Table set %1=%2 where %3=%4 and %5=%6").arg(Field1).arg(level).arg(Field2).arg(mx.at(x-1)).arg(Field3).arg(my.at(y-1));   //这里的mx.at(x-1) 主要是为了方便clear,不clear的话可以直接用 x 来代替.
            if(!query.exec(sql))
                return false;
        }
    }
    return true;
}

void MyWidget::on_pushButton_clicked()
{
    //以field2,field3两个字段值为基础,给field1进行赋值.
    bool rel = strat(m_data,"Field1","Field2","Field3",m_TYDJ,m_TYDJ);
    if(!rel)
    {
        QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("评价失败!"));
        return;
    }

    QMessageBox::information(this,QString::fromLocal8Bit("信息"),QString::fromLocal8Bit("评价成功!"));
}

void MyWidget::on_pushButton_2_clicked()
{
    this->close();
}

效果图 : 

如果邪恶是华丽残酷的乐章,它的终场我会亲手写上。《夜的第七章》

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值