前言
有个项目需要用QTableWidget对IP地址进行排序,网上找了下资料参考,简单实现了下。
提示:以下是本篇文章正文内容,下面案例可供参考
1.效果展示
2.头文件
代码如下(示例):
#ifndef CTABLEWIDGETIPITEM_H
#define CTABLEWIDGETIPITEM_H
#include <QObject>
#include <QDebug>>
#include <QTableWidgetItem>
class CTableWidgetIPItem : public QObject, public QTableWidgetItem
{
Q_OBJECT
public:
CTableWidgetIPItem(QString strTset = QString());
~CTableWidgetIPItem();
bool operator < (const QTableWidgetItem &other) const;
};
#endif // CTABLEWIDGETIPITEM_H
3.函数实现
代码如下(示例):
#include "ctablewidgetipitem.h"
CTableWidgetIPItem::CTableWidgetIPItem(QString strTset)
:QTableWidgetItem(strTset)
{
}
CTableWidgetIPItem::~CTableWidgetIPItem()
{
}
bool CTableWidgetIPItem::operator<(const QTableWidgetItem &other) const
{
QString left = this->text();
QString right = other.text();
QStringList leftList = left.split(".");
QStringList rightList= right.split(".");
QMap<int, int> listMap;
for (int i = 0; i < 4; i++)
listMap.insert(i, 0);
for (int i = 0; i < 4; i++){
QString ipLeft = leftList.at(i);
QString ipRihht = rightList.at(i);
if(ipLeft.toInt() < ipRihht.toInt())
listMap.insert(i, 1);
if(ipLeft.toInt() == ipRihht.toInt())
continue;
else
break;
}
if(listMap.value(0) == 1)
return true;
if(listMap.value(1) == 1)
return true;
if(listMap.value(2) == 1)
return true;
if(listMap.value(3) == 1)
return true;
return false;
}
4.使用
#include "fcomboboxheaderview.h"
//根据自己是第几列添加的ip地址,第几列就使用自定义的TableWidgetItem,其他的使用原本的QTableWidgetItem
void InputOutputSettingsTableWidget::InfraredTabel_InsertData(int rowNumber, int ColumnsNumber, QString Data)
{
if(ColumnsNumber == 2){
CTableWidgetIPItem *item = new CTableWidgetIPItem;
if(ColumnsNumber == 0)
item->setCheckState(Qt::Unchecked);
item->setText(Data);
item->setData(Qt::UserRole, Data);
item->setTextAlignment(Qt::AlignCenter);
item->setFont(QFont("Microsoft YaHei"));
this->setItem(rowNumber, ColumnsNumber, item);
}
else{
QTableWidgetItem *item = new QTableWidgetItem;
if(ColumnsNumber == 0)
item->setCheckState(Qt::Unchecked);
item->setText(Data);
item->setData(Qt::UserRole, Data);
item->setTextAlignment(Qt::AlignCenter);
item->setFont(QFont("Microsoft YaHei"));
this->setItem(rowNumber, ColumnsNumber, item);
}
}