16,235
社区成员
发帖
与我相关
我的任务
分享
#ifndef COMMON_H
#define COMMON_H
#include <QString>
struct StatusCode {
QString EN;
QString order;
QString CN;
StatusCode(){}
StatusCode(const StatusCode& a):EN(a.EN) ,order(a.order) ,CN(a.CN){}
};
#endif // COMMON_H
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlTableModel>
#include <QStandardItemModel>
#include "common.h"
#include <string.h>
#include <string>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void getData();
void setData();
QList<struct StatusCode *> StatusCode_List;
bool static stdSort(StatusCode *StatusCode1, StatusCode *StatusCode2);
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
QStandardItemModel *model_tableView;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include "QMessageBox"
#include "QDebug"
#include <QDesktopWidget>
#include <QStandardItemModel>
#include <QString>
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <QLocale>
#include <QCollator>
#include <qmessagebox.h>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
model_tableView = new QStandardItemModel(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::setData()
{
StatusCode *entity = new StatusCode();
entity->EN = "BBC";
entity->order = "1";
entity->CN = "中";
StatusCode_List.append(entity);
entity = nullptr;
entity = new StatusCode();
entity->EN = "BBC";
entity->order = "1";
entity->CN = "英";
StatusCode_List.append(entity);
entity = nullptr;
entity = new StatusCode();
entity->EN = "ABC";
entity->order = "3";
entity->CN = "中1";
StatusCode_List.append(entity);
entity = nullptr;
entity = new StatusCode();
entity->EN = "ABC";
entity->order = "2";
entity->CN = "中2";
StatusCode_List.append(entity);
std::sort(StatusCode_List.begin(),StatusCode_List.end(),stdSort);
entity = nullptr;
}
void Widget::getData()
{
model_tableView->setHorizontalHeaderItem(0, new QStandardItem("英文"));
model_tableView->setHorizontalHeaderItem(1, new QStandardItem("数字"));
model_tableView->setHorizontalHeaderItem(2, new QStandardItem("中文"));
for(int i=0;i<StatusCode_List.count();i++)
{
int k=0;
model_tableView->setItem(i, k, new QStandardItem(StatusCode_List[i]->EN));
k++;
model_tableView->setItem(i, k, new QStandardItem(StatusCode_List[i]->order));
k++;
model_tableView->setItem(i, k, new QStandardItem(StatusCode_List[i]->CN));
k++;
}
ui->tableView->setModel(model_tableView);
}
void Widget::on_pushButton_clicked()
{
setData();
getData();
}
bool Widget::stdSort(StatusCode *StatusCode1, StatusCode *StatusCode2)
{
if(QString::compare(StatusCode1->EN,StatusCode2->EN)<0)
{
return true;
}else if(QString::compare(StatusCode1->EN,StatusCode2->EN)>0)
{
return false;
}
if(QString::compare(StatusCode1->order,StatusCode2->order)<0)
{
return true;
}else if(QString::compare(StatusCode1->order,StatusCode2->order)>0)
{
return false;
}
QLocale loc(QLocale::Chinese, QLocale::China);
QCollator qcol(loc);
QLocale cn(QLocale::Chinese);
QCollator cr(cn);
int nResult = 0;
char* ch1;
QByteArray ba1 = StatusCode1->CN.toLatin1();
ch1=ba1.data();
QString str1;
str1 = QString::fromLocal8Bit(ch1);
char* ch2;
QByteArray ba2 = StatusCode2->CN.toLatin1();
ch2=ba2.data();
QString str2;
str2= QString::fromLocal8Bit(ch2);
nResult = cr.compare(str1, str2);
if(nResult<0)
{
return true;
}else if(nResult>0)
{
return false;
}
}