当前位置: 首页 > news >正文

中国电子网我们seo

中国电子网,我们seo,苏州做网站优化公司哪家好,自己电脑怎么做web网站吗文章目录 1. QTableWidget概述2. 源码2.1 可视化UI设计2.2 程序框架2.3 qwintspindelegate.h2.4 qwintspindelegate.cpp2.5 mainwindow.h2.6 mainwindow.cpp 1. QTableWidget概述 QTableWidget是Qt中的表格组件类。在窗体上放置一个QTableWidget 组件后,可以在 PropertyEditor…

文章目录

  • 1. QTableWidget概述
  • 2. 源码
    • 2.1 可视化UI设计
    • 2.2 程序框架
    • 2.3 qwintspindelegate.h
    • 2.4 qwintspindelegate.cpp
    • 2.5 mainwindow.h
    • 2.6 mainwindow.cpp

1. QTableWidget概述

QTableWidget是Qt中的表格组件类。在窗体上放置一个QTableWidget 组件后,可以在 PropertyEditor 里对其进行属性设置,双击这个组件,可以打开一个编辑器,对其 Colum、Row 和 Item 进行编辑。一个QTableWidget 组件的界面基本结构如图4-17 所示,这个表格设置为6行5列。

在这里插入图片描述

表格的第1行称为行表头,用于设置每一列的标题,第1列称为列表头,可以设置其标题,但一般使用缺省的标题,即为行号。行表头和列表头一般是不可编辑的。

除了行表头和列表头之外的表格区域是内容区,内容区是规则的网格状,如同一个二维数组,每个网格单元称为一个单元格。每个单元格有一个行号、列号,图4-17 表示了行号、列号的变化规律。

在QTableWidget 表格中,每一个单元格是一个QTableWidgetItem 对象,可以设置文字内容、字体、前景色、背景色、图标,也可以设置编辑和显示标记。每个单元格还可以存储一个 QVariant 数据,用于设置用户自定义数据。

实例 samp4_9以QTableWidget 为主要组件,演示 QTableWidget 一些主要操作的实现。实例运行时的界面如图 4-18 所示,该实例将演示以下功能的实现方法。

  • 设置表格的列数和行数,设置表头的文字、格式等。

  • 初始化表格数据,设置一批实例数据填充到表格里。

  • 插入行、添加行、删除当前行的操作。

  • 遍历表格所有单元格,读取表格内容到一个 QPlainTextEdit 里,表格的一行数据作为一行文本。

  • 表格上选择的当前单元格变化时,在状态栏显示单元格存储的信息

在这里插入图片描述

2. 源码

2.1 可视化UI设计

在这里插入图片描述

2.2 程序框架

在这里插入图片描述

2.3 qwintspindelegate.h

#ifndef QWINTSPINDELEGATE_H
#define QWINTSPINDELEGATE_H#include    <QObject>
#include    <QWidget>
#include    <QItemDelegate>class QWIntSpinDelegate : public QItemDelegate
{Q_OBJECT
public:QWIntSpinDelegate(QObject *parent=0);QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const Q_DECL_OVERRIDE;void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const Q_DECL_OVERRIDE;void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,const QModelIndex &index) const Q_DECL_OVERRIDE;
};#endif // QWINTSPINDELEGATE_H

2.4 qwintspindelegate.cpp

#include "qwintspindelegate.h"#include    <QSpinBox>QWIntSpinDelegate::QWIntSpinDelegate(QObject *parent):QItemDelegate(parent)
{}QWidget *QWIntSpinDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option, const QModelIndex &index) const
{Q_UNUSED(option);Q_UNUSED(index);QSpinBox *editor = new QSpinBox(parent);editor->setFrame(false);editor->setMinimum(0);editor->setMaximum(10000);return editor;
}void QWIntSpinDelegate::setEditorData(QWidget *editor,const QModelIndex &index) const
{int value = index.model()->data(index, Qt::EditRole).toInt();QSpinBox *spinBox = static_cast<QSpinBox*>(editor);spinBox->setValue(value);
}void QWIntSpinDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{QSpinBox *spinBox = static_cast<QSpinBox*>(editor);spinBox->interpretText();int value = spinBox->value();model->setData(index, value, Qt::EditRole);
}void QWIntSpinDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{Q_UNUSED(index);editor->setGeometry(option.rect);
}

2.5 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include    <QMainWindow>
#include    <QLabel>
#include    <QTableWidgetItem>#include    "qwintspindelegate.h"namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTprivate:
//  自定义单元格Type的类型,在创建单元格的Item时使用enum    CellType{ctName=1000,ctSex,ctBirth,ctNation,ctPartyM,ctScore}; //各单元格的类型//  各字段在表格中的列号enum    FieldColNum{colName=0, colSex,colBirth,colNation,colScore,colPartyM};QLabel  *labCellIndex; //状态栏上用于显示单元格的行号、列号QLabel  *labCellType;  //状态栏上用于显示单元格的typeQLabel  *labStudID;    //状态栏上用于显示单元格的data,QWIntSpinDelegate   spinDelegate; //代理组件void    createItemsARow(int rowNo,QString Name,QString Sex,QDate birth,QString Nation,bool isPM,int score); //为某一行创建items
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_btnSetHeader_clicked();  //设置表头 按键void on_btnSetRows_clicked(); //设置行数 按键void on_btnIniData_clicked(); //初始化数据 按键void on_chkBoxTabEditable_clicked(bool checked); //表格可编辑 checkboxvoid on_chkBoxHeaderH_clicked(bool checked); //显示行表头 checkboxvoid on_chkBoxHeaderV_clicked(bool checked); //显示列表头 checkboxvoid on_chkBoxRowColor_clicked(bool checked); //间隔行底色 checkboxvoid on_rBtnSelectItem_clicked();   // 行选择模式 RadioButtonvoid on_rBtnSelectRow_clicked();    // 单元格选择模式 RadioButtonvoid on_btnReadToEdit_clicked(); //读取表格内容到文本 按键void on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);void on_btnInsertRow_clicked();  //插入行 按键void on_btnAppendRow_clicked(); //添加行  按键void on_btnDelCurRow_clicked();     //删除当前行 按键void on_btnAutoHeght_clicked();void on_btnAutoWidth_clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

2.6 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include    <QDate>
#include    <QTableWidgetItem>
#include    <QComboBox>
#include    <QTextBlock>
#include    <QTextDocument>void MainWindow::createItemsARow(int rowNo,QString Name,QString Sex,QDate birth,QString Nation,bool isPM,int score)
{ //为一行的单元格创建 ItemsQTableWidgetItem    *item;QString str;uint StudID=201605000; //学号基数//姓名//新建一个Item,设置单元格type为自定义的MainWindow::ctNameitem=new  QTableWidgetItem(Name,MainWindow::ctName);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //文本对齐格式StudID  +=rowNo; //学号=基数+ 行号item->setData(Qt::UserRole,QVariant(StudID));  //设置studID为dataui->tableInfo->setItem(rowNo,MainWindow::colName,item); //为单元格设置Item//性别QIcon   icon;if (Sex=="男")icon.addFile(":/images/icons/boy.ico");elseicon.addFile(":/images/icons/girl.ico");item=new  QTableWidgetItem(Sex,MainWindow::ctSex); //新建一个Item,设置单元格type为自定义的 MainWindow::ctSexitem->setIcon(icon);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//为单元格设置Itemui->tableInfo->setItem(rowNo,MainWindow::colSex,item);//为单元格设置Item//出生日期str=birth.toString("yyyy-MM-dd"); //日期转换为字符串item=new  QTableWidgetItem(str,MainWindow::ctBirth);//新建一个Item,设置单元格type为自定义的 MainWindow::ctBirthitem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); //文本对齐格式ui->tableInfo->setItem(rowNo,MainWindow::colBirth,item);//为单元格设置Item//民族item=new  QTableWidgetItem(Nation,MainWindow::ctNation); //新建一个Item,设置单元格type为自定义的 MainWindow::ctNationitem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式ui->tableInfo->setItem(rowNo,MainWindow::colNation,item);//为单元格设置Item//是否党员item=new  QTableWidgetItem("党员",MainWindow::ctPartyM);//新建一个Item,设置单元格type为自定义的 MainWindow::ctPartyMitem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式if (isPM)item->setCheckState(Qt::Checked);elseitem->setCheckState(Qt::Unchecked);item->setBackgroundColor(Qt::yellow);//Qt::green  lightGray  yellowui->tableInfo->setItem(rowNo,MainWindow::colPartyM,item);//为单元格设置Item//分数str.setNum(score);item=new  QTableWidgetItem(str,MainWindow::ctScore);//新建一个Item,设置单元格type为自定义的 MainWindow::ctPartyMitem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式ui->tableInfo->setItem(rowNo,MainWindow::colScore,item);//为单元格设置Item
}MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);setCentralWidget(ui->splitterMain);//状态栏初始化创建labCellIndex = new QLabel("当前单元格坐标:",this);labCellIndex->setMinimumWidth(250);labCellType=new QLabel("当前单元格类型:",this);labCellType->setMinimumWidth(200);labStudID=new QLabel("学生ID:",this);labStudID->setMinimumWidth(200);ui->statusBar->addWidget(labCellIndex);//加到状态栏ui->statusBar->addWidget(labCellType);ui->statusBar->addWidget(labStudID);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btnSetHeader_clicked()
{ //设置表头QTableWidgetItem    *headerItem;QStringList headerText;headerText<<"姓 名"<<"性 别"<<"出生日期"<<"民 族"<<"分数"<<"是否党员";  //表头标题用QStringList来表示
//    ui->tableInfo->setHorizontalHeaderLabels(headerText);ui->tableInfo->setColumnCount(headerText.count());//列数设置为与 headerText的行数相等for (int i=0;i<ui->tableInfo->columnCount();i++)//列编号从0开始{headerItem=new QTableWidgetItem(headerText.at(i)); //新建一个QTableWidgetItem, headerText.at(i)获取headerText的i行字符串QFont font=headerItem->font();//获取原有字体设置font.setBold(true);//设置为粗体font.setPointSize(12);//字体大小headerItem->setTextColor(Qt::red);//字体颜色headerItem->setFont(font);//设置字体ui->tableInfo->setHorizontalHeaderItem(i,headerItem); //设置表头单元格的Item}ui->tableInfo->setItemDelegateForColumn(colScore,&spinDelegate);//设置自定义代理组件
}void MainWindow::on_btnSetRows_clicked()
{ //设置行数,设置的行数为数据区的行数,不含表头//如设置10行,数据区有10行,但是访问行号为0~9ui->tableInfo->setRowCount(ui->spinRowCount->value());//设置数据区行数ui->tableInfo->setAlternatingRowColors(ui->chkBoxRowColor->isChecked()); //设置交替行背景颜色
}void MainWindow::on_btnIniData_clicked()
{ //初始化表格内容QString strName,strSex;bool    isParty=false;QDate   birth;birth.setDate(1980,4,7);//初始化一个日期ui->tableInfo->clearContents();//只清除工作区,不清除表头int Rows=ui->tableInfo->rowCount(); //数据区行数,for (int i=0;i<Rows;i++) //数据区第1行的编号为0,所以范围是0~rowCount()-1{strName=QString::asprintf("学生%d",i); //学生姓名if ((i % 2)==0) //分奇数,偶数行设置性别,及其图标strSex="男";elsestrSex="女";createItemsARow(i, strName, strSex, birth,"汉族",isParty,70); //为某一行创建itemsbirth=birth.addDays(20); //日期加20天isParty =!isParty;}
}void MainWindow::on_chkBoxTabEditable_clicked(bool checked)
{ //设置编辑模式if (checked)
//双击或获取焦点后单击,进入编辑状态ui->tableInfo->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);elseui->tableInfo->setEditTriggers(QAbstractItemView::NoEditTriggers); //不允许编辑
}void MainWindow::on_chkBoxHeaderH_clicked(bool checked)
{//是否显示水平表头ui->tableInfo->horizontalHeader()->setVisible(checked);
}void MainWindow::on_chkBoxHeaderV_clicked(bool checked)
{//是否显示垂直表头ui->tableInfo->verticalHeader()->setVisible(checked);
}void MainWindow::on_chkBoxRowColor_clicked(bool checked)
{ //行的底色交替采用不同颜色ui->tableInfo->setAlternatingRowColors(checked);
}void MainWindow::on_rBtnSelectItem_clicked()
{//选择行为:单元格选择ui->tableInfo->setSelectionBehavior(QAbstractItemView::SelectItems);
}void MainWindow::on_rBtnSelectRow_clicked()
{//选择行为:行选择ui->tableInfo->setSelectionBehavior(QAbstractItemView::SelectRows);
}void MainWindow::on_btnReadToEdit_clicked()
{//将 QTableWidget的所有行的内容提取字符串,显示在QPlainTextEdit里QString str;QTableWidgetItem    *cellItem;ui->textEdit->clear(); //文本编辑器清空for (int i=0;i<ui->tableInfo->rowCount();i++) //逐行处理{str=QString::asprintf("第 %d 行: ",i+1);for (int j=0;j<ui->tableInfo->columnCount()-1;j++) //逐列处理,但最后一列是check型,单独处理{cellItem=ui->tableInfo->item(i,j); //获取单元格的itemstr=str+cellItem->text()+"   "; //字符串连接}cellItem=ui->tableInfo->item(i,colPartyM);  //最后一列,党员if (cellItem->checkState()==Qt::Checked)  //根据check状态显示文字str=str+"党员";elsestr=str+"群众";ui->textEdit->appendPlainText(str); //添加到编辑框作为一行}
}void MainWindow::on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{//当前选择单元格发生变化时的响应Q_UNUSED(previousRow);Q_UNUSED(previousColumn);QTableWidgetItem* item=ui->tableInfo->item(currentRow,currentColumn); //获取单元格的 Itemif  (item==NULL)return;labCellIndex->setText(QString::asprintf("当前单元格坐标:%d 行,%d 列",currentRow,currentColumn));int cellType=item->type();//获取单元格的类型labCellType->setText(QString::asprintf("当前单元格类型:%d",cellType));item=ui->tableInfo->item(currentRow,MainWindow::colName); //取当前行第1列的单元格的 itemint ID=item->data(Qt::UserRole).toInt();//读取用户自定义数据labStudID->setText(QString::asprintf("学生ID:%d",ID));//学生ID
}void MainWindow::on_btnInsertRow_clicked()
{ //插入一行int curRow=ui->tableInfo->currentRow();//当前行号ui->tableInfo->insertRow(curRow); //插入一行,但不会自动为单元格创建itemcreateItemsARow(curRow, "新学生", "男",QDate::fromString("1990-1-1","yyyy-M-d"),"苗族",true,60 ); //为某一行创建items
}void MainWindow::on_btnAppendRow_clicked()
{ //添加一行int curRow=ui->tableInfo->rowCount();//当前行号ui->tableInfo->insertRow(curRow);//在表格尾部添加一行createItemsARow(curRow, "新生", "女",QDate::fromString("2000-1-1","yyyy-M-d"),"满族",false,50 ); //为某一行创建items
}void MainWindow::on_btnDelCurRow_clicked()
{//删除当前行及其itemsint curRow=ui->tableInfo->currentRow();//当前行号ui->tableInfo->removeRow(curRow); //删除当前行及其items
}void MainWindow::on_btnAutoHeght_clicked()
{ui->tableInfo->resizeRowsToContents();
}void MainWindow::on_btnAutoWidth_clicked()
{ui->tableInfo->resizeColumnsToContents();
}
http://www.r43.cn/news/149747.html

相关文章:

  • 网站建设报什么专业图片外链工具
  • 网站的跳出率中国十大网站有哪些
  • 几款免费流程图制作软件沈阳seo公司
  • 秦皇岛在线青海百度关键词seo
  • 化妆品电商网站模板国内广告投放平台
  • 设计网站的收费图是怎么做的宁波正规seo快速排名公司
  • 做机械设备销售的那个网站好资源猫
  • 镇江网站优化推广漯河网站seo
  • 工程建设信息官方网站营销型网站建设多少钱
  • 徐州做网站谁家最专业安卓优化软件
  • 白云网站 建设信科网络seo专业培训费用
  • 做旅游攻略网站好国内重大新闻十条
  • 酒类网站建设方案电商是做什么的
  • 做淘宝网站java代码吗看广告赚钱的平台
  • 做动态二维码的网站云搜索
  • 个人网站开发工具免费网站代理访问
  • 合肥网站建设司图百度seo按天计费
  • 网站建设开发费怎么做账seo友情链接
  • wordpress文章会员seo的公司排名
  • 网站开发文档步骤应该怎么写dw网页制作详细步骤
  • 模版网站建设百度风云榜小说排行榜
  • 所有复刻手表网站市场seo是什么意思
  • 个人网站策划书模板徐州网页关键词优化
  • 做装修效果图的网站有哪些软件上海搜索排名优化公司
  • 怎么做本地网站三只松鼠搜索引擎推广
  • 做58同城网站需要多少钱谷歌seo网站建设
  • 如何做网站代理中国新闻网
  • 找公司做网站需要咨询什么问题石家庄百度搜索引擎优化
  • 昆山建设银行网站首页百度投放广告流程
  • 网站app制作hao123网址导航