QTableWidget高级使用总结_qtableview详细使用方法与属性-程序员宅基地

技术标签: Qt  qt  QTableWidget  

常用设置/接口/API

//使行列头自适应宽度,最后一列将会填充空白部分,也可以实现充满窗体

table->horizontalHeader()->setStretchLastSection(true);

//使行列头自适应宽度,所有列平均分来填充空白部分

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

//使行自适应高度,假如行很多的话,行的高度不会一直减小,当达到一定值时会自动生成一个QScrollBar

table->verticalHeader()->setResizeMode(QHeaderView::Strtch);

//设置单击选择一行

table->setSelectionBehavior(QAbstractItemView::SelectRows);

//设置表格内容不可编辑

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

//设置某一列或某一行不可编辑,需要使用每个item不能编辑的来设置。不能设置表格内容不可编辑

item = new QTableWidgetItem(str);

item->setFlags(item->flags() & (~Qt::ItemIsEditable));

//设置只能选择一行,不能选择多行

table->setSelectionMode(QAbstractItemView::SingleSelection);

/去掉每行的行号,左侧自增行号/

QHeaderView *headerView = table->verticalHeader();

headerView->setHidden(true);

/设置让某个单元格或某行选中/

选中单元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);

选中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此处的列没有值)

ui->friendList->setEditTriggers(QAbstractItemView::NoEditTriggers);

//设置每行内容不可更改

ui->friendList->setAlternatingRowColors(true);

//设置隔一行变一颜色,即:一灰一白

setAlternatingRowColors(true);//任意单击都选中一行setSelectionBehavior(QAbstractItemView::SelectRows);

//设置要选中高亮的行,这里会触发QTableWidget::itemClicked的信号

tableWidget->selectRow(row);

//取消高亮效果:

table->clearSelection()

//类似的API:setSelection()\selectAll()

//取消表头选中时候,高亮

->horizontalHeader()->setHighlightSections(false);

//内容居中, 设置具体单元格中字体

table->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

table->item(1, 0)->setBackgroundColor(QColor(0,60,10));   //背景颜色

table->item(1, 0)->setTextColor(QColor(200,111,100));       //字体颜色

table->item(1, 0)->setFont(QFont(“Helvetica”));                  //字体风格

//显示图标:

tableWdiget->setItem(0,1,newQTableWidgetItem(QIcon(":/image/cpu"),“cpu”));

设置图标的大小:setIconSize()

//默认行高 默认列宽

QTtableView或者QTableWidget的verticalHeader()->setDefaultSectionSize(15)可以设置tableview所有行的默认行高为15。

QTtableView或者QTableWidget的horizontalHeader()->setDefaultSectionSize(15)可以设置tableview所有列的默认列宽为15。

//根据不同的列设置不同的效果

ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);

ui->tableWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);

ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);

QTableWidget****控件属性

1)禁止编辑表格

在默认情况下,表格里的字符是可以更改的。

比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

2)设置表格为选择整行

/设置表格为整行选中/

table->setSelectionBehavior(QAbstractItemView::SelectRows);

3)设置单个选中和多个选中

单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。

/设置允许多个选中/

ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

4)表格表头的显示与隐藏

对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:

ui.qtablewidget->verticalHeader()->setVisible(true);

ui.qtablewidget->horizontalHeader()->setVisible(false);

5)设置具体单元格中字体的对齐方式

ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);

6)设置具体单元格中字体格式

ui.qtablewidget->item(1, 0)->setBackgroundColor(QColor(0,60,10));

ui.qtablewidget->item(1, 0)->setTextColor(QColor(200,111,100));

ui.qtablewidget->item(1, 0)->setFont(QFont(“Helvetica”));

7)设置具体单元格的值

ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));

8)把QTableWidgetItem对象内容转换为****QString

QString str =table->item(0, 0)->data(Qt::DisplayRole).toString();

9)具体单元格中添加控件

QComboBox *comBox = new QComboBox();

comBox->addItem(“F”);

comBox->addItem(“M”);

ui.qtablewidget->setCellWidget(0,3,comBox);

10)合并单元格

//合并单元格的效果

ui.qtablewidget->setSpan(2, 2, 3, 2);

//第一个参数:要改变的单元格行数

//第二个参数:要改变的单元格列数

//第三个参数:需要合并的行数

//第四个参数:需要合并的列数

11)具体单元格中插入图片

ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon(“images/music.png”), “Music”));

12)设置显示网格

ui.qtablewidget->setShowGrid(true);//显示表格线

setShowGrid(false); //去除表格线、分割线。

13)设置滚动条

ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条

14)设置列标签

//初始化界面

QStringList HStrList;

HStrList.push_back(QString(“name”));

HStrList.push_back(QString(“id”));

HStrList.push_back(QString(“age”));

HStrList.push_back(QString(“sex”));

HStrList.push_back(QString(“department”));

//设置行列数(只有列存在的前提下,才可以设置列标签)

int HlableCnt = HStrList.count();

ui.qtablewidget->setRowCount(10);

ui.qtablewidget->setColumnCount(HlableCnt);

//设置列标签,表头

ui.qtablewidget->setHorizontalHeaderLabels(HStrList);

16)设置行和列的大小设为与内容相匹配

ui.qtablewidget->resizeColumnsToContents();

ui.qtablewidget->resizeRowsToContents();

17)设置字体

ui.qtablewidget->setFont(font); //设置字体

18)获取某一单元格的内容

QString strText = ui.qtablewidget->item(0, 0)->text();

19)清空表格的内容

void QTableWidget::clear () [slot]//清空掉表格内所有内容,包括标题头

void QTableWidget::clearContents () [slot]//这个清空所有内容不包括标题头

void QTableWidget::removeColumn ( int column ) [slot]//这个是删除一列,而不是清空表格

void QTableWidget::removeRow ( int row ) [slot]//这个是删除一行,不是清空一行

20)去除分割线:

setShowGrid(false);

QTableWidget的用法总结****

检索tablewidget的内容

//获取符合条件的cell索引
//Qt::MatchContains 会匹配出只要包含text的item的模糊匹配
//Qt::MatchRegExp 只包含text的item 完全匹配。
QList <QTableWidgetItem *> item = source->findItems(text,  Qt::MatchContains);   
for (int i = 0; i  < rC; i++)
{
  source->setRowHidden(i,  true);//隐藏所有行
}
if  (!item.isEmpty())//不为空
{
  for (int i = 0; i  < item.count(); i++)
  {
    source->setRowHidden(item.at(i)->row(),false);//item.at(i).row()输出行号
  }
}

item背景色

* item->setBackgroundColor(QColor(255,0,0));
* item->setBackground(QBrush(QColor(255, 0, 0)));

右键菜单

Constant
Qt::NoContextMenu 小部件没有上下文菜单,上下文菜单处理被延迟到小部件的父组件。
Qt::PreventContextMenu 小部件没有上下文菜单,而且与NoContextMenu相反,处理不会延迟到小部件的父级。这意味着所有鼠标右键事件都保证通过QWidget::mousePressEvent()和QWidget::mouseReleaseEvent()传递到小部件本身。
Qt::DefaultContextMenu 调用小部件的QWidget::contextMenuEvent()处理程序。
Qt::ActionsContextMenu 小部件将其QWidget::actions()显示为上下文菜单。
Qt::CustomContextMenu 小部件发出QWidget:: customcontextmenurequired()信号。
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(show_contextMenu(QPoint)));
void Dg_Setting_Long::show_contextMenu(QPoint pos)//pos 是在table内的相对位置
{
    Q_UNUSED(pos);
    if(cmenu)//保证同时只存在一个menu,及时释放内存
    {
        delete cmenu;
        cmenu = nullptr;
    }
QTableWidget *table = qobject_cast<QTableWidget*>(sender());
    cmenu = new QMenu(table);
 
    QAction* modColAction = cmenu->addAction("修改该行");
    QAction* delColAction = cmenu->addAction("删除该行");
    QAction* addColAction = cmenu->addAction("增加一行");
 
    connect(modColAction, SIGNAL(triggered(bool)), this, SLOT(action_mod()));
    connect(delColAction, SIGNAL(triggered(bool)), this, SLOT(action_del()));
    connect(addColAction, SIGNAL(triggered(bool)), this, SLOT(action_add()));
 
    cmenu->exec(QCursor::pos());//在当前鼠标位置显示
    //cmenu->exec(pos)是在viewport显示
} 

Qtablewidget表头的排序指示器:

table->horizontalHeader()->setSortIndicator(col,Qt::AscendingOrder);

  • 在ui文件中table属性Header

表头可见/不可见

  • ui->tableWidget->horizontalHeader()->setVisible(true);

样式设置

添加复选框:改变选中和非选中的Icon。

->setStyleSheet()

QTableWidget::indicator  {
    width:  40px;
    height:  40px;
}
QTableWidget::indicator:unchecked  {
    image:  url(:/icon/unchecked.png);
}
QTableWidget::indicator:checked  {
    image:  url(:/icon/checked.png);
}

qss表头和滚动条属性:

//表示表头没有设置区域
QHeaderView{
font:14pt;
}
//v表示设置了表头的区域
QHeaderView::section  {
background-color:lightgray;color:  black;
padding-left:  4px;border: 1px solid #6c6c6c;
font:14pt '宋体';
}
QTableWidget  QHeaderView::section {
background-color:  rgb(210, 210, 210);color: black;
padding-left:  4px;border: 1px solid white;
font: 12pt  "微软雅黑";
height:40px;
}
 
/*table 滚动条*/
QScrollBar{
height:30px;
width:30px;
background-color:rgb(93,172,228);
}
//会把两端箭头消失
QScrollBar::handle{
background-color:  rgb(255, 0, 127);
}
QScrollBar::add-line:vertical  
QScrollBar::sub-line:vertical  

设置表头字体和背景

ui.tableWidget_grid->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:rgb(40,143,218);font:13pt  '宋体';color: white;};");

selection-background-color选中的背景色

QTableWidget 如何让左上角的方块不可点击

QTableWidget如何让左上角的方块不可点击

用Designer,在QTableView里面有一个cornerBottonEnabled,将其勾去掉。

用代码编写

setCornerButtonEnabled(true);

QTableWidget让Item不可编辑

将QAbstractItemView下的selectionMode改为NoSelection。

QTableWidget让Header不可点击

horizontalHeader()->setSectionsClickable(false);    //水平方向的头不可点击

verticalHeader()->setSectionsClickable(false);      //垂直方向的头不可点击

QTableView表格左上角样式

图片

QScrollBar::handle:vertical  
{ 
background-color:  rgb(210, 210, 210);
}
QScrollBar:vertical{
width:22px;
background-color:rgb(214,214,214);
margin:30px  0px 30px 0px;
}
 
QScrollBar::add-page:vertical,  QScrollBar::sub-page:vertical
{
background-color:  rgb(255, 255, 255);
}
QScrollBar::up-arrow:vertical{
width:22px;
border-image:  url(:/images/FuncWidget/sarrowup.png);
}
QScrollBar::sub-line:vertical{
border:none;
subcontrol-origin:  margin;
height: 30px;
}
QScrollBar::add-line:vertical{
subcontrol-origin:  margin;
height:  30px;
border:none;
}
QScrollBar::down-arrow:vertical{
width:22px;
border-image:  url(:/images/FuncWidget/sarrowdown.png);
}
//红色部分为必须的
 
 
//表头支持箭头,样式
QHeaderView::up-arrow {}
QHeaderView::down-arrow {}

QListWidget与QTableWidget的使用以及样式设置

  • margin:10px 5px 15px 20px;上外边距是 10px
  • 右外边距是 5px
  • 下外边距是 15px
  • 左外边距是 20px

说明

这个简写属性设置一个元素所有外边距的宽度,或者设置各边上外边距的宽度。

块级元素的垂直相邻外边距会合并,而行内元素实际上不占上下外边距。行内元素的的左右外边距不会合并。同样地,浮动元素的外边距也不会合并。允许指定负的外边距值,不过使用时要小心。

某一列内容自适应:

QTableWidget要调整表格行宽主要涉及以下一个函数

1.resizeColumnsToContents();

根据内容调整列宽

2.resizeColumnToContents(int col);

根据内容自动调整给定列宽

3.horizontalHeader()->setResizeMode

把给定列设置为给定模式

主要模式有Stretch和Fixed

qt designer中的设置

在UI设计界面中选中该控件之后可以在属性栏对控件的属性进行设置,最常用的属性有如下:

focusPolicy 焦点策略,如果设置为NoFocus可以去掉单击时候现实的单元格的虚线框

contextMenuPolicy 可以设置右键菜单

frameShape 设置外边框,一般设置为NoFrame去掉边框

editTriggers触发单元格的编辑状态,值NoEditTriggers表示不触发编辑状态

selectionMode选择模式,值ExtendedSelection表示多选

selectionBehavior选择行为,值SelectRows按行选择

showGrid是否显示网格线

rowCount行数

columnCount列数

horizontalHeaderVisible是否显示水平表头

verticalHeaderVIsible是否显示垂直表头

verticalScrollBarPolicy设置垂直滚动条策略

horizontalScrollBarPolicy设置水平滚动条策略

问题:对于水平的滚动条,可能会遇到左边的按钮没有显示的问题

QScrollBar:horizontal {
  height:22px;
  background-color:rgb(214,214,214);
  margin:0px 30px 0px 30px;
}
QScrollBar::handle:horizontal 
{ 
  background-color: rgb(210, 210, 210);
}
 
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
{
  background-color: rgb(255, 255, 255);
}
 
QScrollBar::left-arrow:horizontal{
  height:22px;
  width: 30px;
  border-image: url(:/images/FuncWidget/sarrowleft.png);
 
}
QScrollBar::sub-line:horizontal{
  border:none;
 
}
QScrollBar::right-arrow:horizontal{
  height:22px;
  border-image: url(:/images/FuncWidget/sarrowright.png);
}
 
QScrollBar::add-line:horizontal{
  subcontrol-origin: margin;
  width:30px;
  border:none;
}

QtableWidget****的使用

在item上添加控件:setCellWidget()

* 示例代码:位置可以通过添加widget,再添加布局来实现。
//按钮
++nSubItem;
QPushButton *bt = new QPushButton(tr("添加"));
bt->setObjectName(tr("bt_info_add"));
bt->setMinimumSize(145, 35);
bt->setMaximumSize(145, 35);
connect(bt, SIGNAL(clicked()), this, SLOT(bt_Click()));
QWidget *widget = new QWidget;
QHBoxLayout *hLayout;
hLayout = new QHBoxLayout();
//调用了addWidget 之后,窗体之间存在父子关系
hLayout->addWidget(bt);
hLayout->setMargin(0);
hLayout->setAlignment(widget, Qt::AlignCenter);
hLayout->setContentsMargins(10, 0, 10, 0);
widget->setLayout(hLayout);
ui->tableWidget->setCellWidget(row, nSubItem, widget);

在button的slot函数中,从sender得到button指针,根据这个button的位置(x,y),由tablewidget->itemAt(x,y)可得到modelindex,其中itemAt不受scroll影响.

用这个方法的好处是,从modelindex开始,能完全操作tablewidget.

QPushButton *bt = qobject_cast<QPushButton* >(sender());
QWidget *obj = qobject_cast<QWidget *>(bt->parent());
int x = obj->frameGeometry().x();//obj为你QPushButton
int y = obj->frameGeometry().y();
QModelIndex index = ui->tableWidget->indexAt(QPoint(x,y));
int row = index.row();
int column = index.column();

部分控件只有点击才能出现的功能,委托、代理;可以控制用户的输入。

接口:

void QAbstractItemView::setItemDelegate(QAbstractItemDelegate*delegate)

void QAbstractItemView::setItemDelegateForColumn(intcolumn,QAbstractItemDelegate*delegate)

void QAbstractItemView::setItemDelegateForRow(introw,QAbstractItemDelegate*delegate)

网址:https://www.devbean.net/2013/03/qt-study-road-2-view-delegate/

示例代码:下拉框的实现;

//参考值是否包含最大、最小值委托
/***
• createEditor():返回一个组件。该组件会被作为用户编辑数据时所使用的编辑器,从模型中接受数据,返回用户修改的数据。
• setEditorData():提供上述组件在显示时所需要的默认值。
• updateEditorGeometry():确保上述组件作为编辑器时能够完整地显示出来。
• setModelData():返回给模型用户修改过的数据。
**/
 
class RefValEqualDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    RefValEqualDelegate(QObject* parent = nullptr);
 
    ~RefValEqualDelegate();
 
    void paint(QPainter *painter, const QStyleOptionViewItem    &option,const QModelIndex &index) const;
 
    QSize sizeHint(const QStyleOptionViewItem    &option, const QModelIndex &index) const;
 
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem    &option, const QModelIndex &index) const;
 
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
 
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
};
 
#include "refvalequaldelegate.h"
#include <QComboBox>
#include "reportrangedlg.h"
# pragma execution_character_set("utf-8")
 
void RefValEqualDelegate::paint(QPainter *painter, const QStyleOptionViewItem    &option, const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);
}
 
QSize RefValEqualDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    return QStyledItemDelegate::sizeHint(option, index);
}
 
QWidget *RefValEqualDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem    &option, const QModelIndex &index) const
{
    if(index.isValid() &&
            (static_cast<int>(reference_column_index::REF_MIN_INCLUDED) == index.column() ||
            static_cast<int>(reference_column_index::REF_MAX_INCLUDED) == index.column()))
    {
        QComboBox* inputCombo = new QComboBox(parent);
        inputCombo->addItem(QObject::tr("是"));
        inputCombo->addItem(QObject::tr("否"));
 
        inputCombo->installEventFilter(const_cast<RefValEqualDelegate*>(this));
        return inputCombo;
    }
    else
    {
        return QStyledItemDelegate::createEditor(parent, option, index);
    }
}
 
void RefValEqualDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    if(index.isValid() &&
       (static_cast<int>(reference_column_index::REF_MAX_INCLUDED) == index.column() ||
        static_cast<int>(reference_column_index::REF_MIN_INCLUDED) == index.column()))
    {
        QString value = index.model()->data(index, Qt::DisplayRole).toString();
        QComboBox* inputCombo = qobject_cast<QComboBox*>(editor);
        if(!value.isEmpty())
        {
            inputCombo->setCurrentText(value);
        }
    }
    else
    {
        QStyledItemDelegate::setEditorData(editor, index);
    }
}
 
void RefValEqualDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    if(index.isValid() &&
            (static_cast<int>(reference_column_index::REF_MAX_INCLUDED) == index.column() ||
             static_cast<int>(reference_column_index::REF_MIN_INCLUDED) == index.column()))
    {
        QComboBox* inputCombo = qobject_cast<QComboBox*>(editor);
        model->setData(index, inputCombo->currentText());
    }
    else
    {
        QStyledItemDelegate::setModelData(editor, model, index);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yinsizhilian/article/details/109649495

智能推荐

1028: C语言程序设计教程(第三版)课后习题8.2-程序员宅基地

文章浏览阅读675次。题目描述求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。输入a b c输出x1=? x2=?样例输入4 1 1样例输出x1=-0.125+0.484i x2=-0.125-0.484i 1 #include <stdio.h> 2 #include <math.h..._1028:c语言程序设计教程(第三版)课后习题8.2

汇聚交换机-程序员宅基地

文章浏览阅读1.9k次。按照网络构成方式,网络交换机被划分为接入层交换机、汇聚层交换机和核心层交换机。汇聚层交换机,是多台接入层交换机的汇聚地点。汇聚层交换机的作用是将接入节点统一出口,同样也做转发及选路。它必须能够处理来自接入层设备的所有通信量,并提供到核心层的上行链路。汇聚层交换机需要具备高转发性能,通常也是三层交换机。但不是每个网络都需要汇聚交换机,交换机的选择取决于网络环境的大小及设备的转发能力。简而言之,就是汇聚

宝塔Nginx 安装check模块nginx_upstream_check_module_宝塔 安装 nginx_upstream_check_module-程序员宅基地

文章浏览阅读2.1k次。第一步:在宝塔安装nginx,选择编译安装第二步:在这个基础上加新增模块nginx_upstream_check_module,步骤如下1.执行命令获取nginx_upstream_check_module模块: wgethttps://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master2.进入..._宝塔 安装 nginx_upstream_check_module

c/c++易错点收集(持续更新)_c++易错题总结-程序员宅基地

文章浏览阅读1.7k次,点赞7次,收藏27次。收集了c,c++语言在学习和应用的时候一些易错点,加入了个人分析。仅供参考,有错误的地方请多多指出_c++易错题总结

Anaconda安装、创建环境、TensorFlow、CUDA以及cuDNN安装-程序员宅基地

文章浏览阅读1.9k次,点赞5次,收藏17次。利用Anaconda安转TensorFlow、cuda以及cuDNN教程。

POST请求参数_当客户端通过post请求提交的参数为自定义js对象,接收参数需要那个注释-程序员宅基地

文章浏览阅读488次。设置form表单为:新建一个post.js里面内容为:从app.js中把主体部分拷贝过来。然后服务器运营post.js文件。加入data和end事件。在form.js中打开。输入用户名和密码。提交。结果返回ok .证明post请求后服务器响应了。服务器中也有存的内容引入querystring处理请求参数模块。引用querystring:重新输入名和密码,提交。此时用户名和密码以对象的形式来进行存储..._当客户端通过post请求提交的参数为自定义js对象,接收参数需要那个注释

随便推点

大数据Spark(三十三):SparkSQL分布式SQL引擎_sparksql作为分布式sql查询引擎-程序员宅基地

文章浏览阅读1.1k次。停止使用:在实际大数据分析项目中,使用SparkSQL时,往往启动一个ThriftServer服务,分配较多资源(Executor数目和内存、CPU),不同的用户启动beeline客户端连接,编写SQL语句分析数据。Spark Thrift Server将Spark Applicaiton当做一个服务运行,提供Beeline客户端和JDBC方式访问,与Hive中HiveServer2服务一样的。回顾一下,如何使用Hive进行数据分析的,提供哪些方式交互分析?_sparksql作为分布式sql查询引擎

Python 代理爬取网站数据_python 发送代理爬取网站-程序员宅基地

文章浏览阅读907次。代理IP通过https://www.kuaidaili.com/free/ 获取,我使用的的是http协议的代理。根据自己需求选择http或者https 协议的页面。访问量会有增长,但效果不是非常理想,后面找时间在研究下、废话不多说,直接上代码。# -*- coding:utf-8 -*-import requestsimport randomimport timeim..._python 发送代理爬取网站

Spark的关键技术回顾-程序员宅基地

文章浏览阅读2.4k次,点赞46次,收藏69次。目录前言Spark的关键技术回顾一、Spark复习题回顾1、Spark使用的版本2、Spark几种部署方式?3、Spark的提交任务的方式?4、使用Spark-shell的方式也可以交互式写Spark代码?5、你对RDD是怎么理解的?6、Spark如何实现容错?7、Spark共享变量?8、Spark的任务执行?9、Spark的RDD的几种类型?10、Spark的Transformation算子有几类?11、RDD创建的三种方法?12、RDD-Dat

php 截取特定字符串_php字符串截取 指定字符串-程序员宅基地

文章浏览阅读3.4k次。可以使用函数strripos,获取一个字符串在另一个字符串中第一次出现的位置。可以使用函数strrpos,获取一个字符串在另一个字符串中最后一次出现的位置。1、php 截取特定字符后面的内容。2、php 截取特定字符前面的内容。_php字符串截取 指定字符串

机器学习(Machine Learning)&深度学习(Deep Learning)学习资料总结_machine learnig和deep learning 求解 math word problem-程序员宅基地

文章浏览阅读564次。机器学习(Machine Learning)&深度学习(Deep Learning)资料总结下面链接是GitHub上一位大神的总结,非常详细的列举了Machine Learning & Deep Learning的很多资料,具有很好的参考价值click here( 机器学习(Machine Learning)&深度学习(Deep Learning)资料总结)_machine learnig和deep learning 求解 math word problem solver

记一次post请求参数为json格式时,HTTPServletRequest拿不到请求参数问题_http 发送post请求拿不到参数-程序员宅基地

文章浏览阅读6.3k次。根据业务需求需要在满足条件的post请求前,做一些处理,因此想到用 HandlerInterceptor 来拦截请求以做进一步处理,便如图所示获取参数但是,这种获取参数的形式可以获取表单形式(header),是拿不到参数为json格式的post请求参数的,于是便又有了一下方式获取json格式的参数这种方法可以再拦截器找那个拿到参数,但是!!!这样在controller中使用..._http 发送post请求拿不到参数

推荐文章

热门文章

相关标签