zoukankan      html  css  js  c++  java
  • QTableWidget

    1.QTableWidget继承自QTableView。

    QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。​ QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

    QTableWidget和QTableView区别见:https://blog.csdn.net/zyc_csdn/article/details/78830542 

        tbl_task_list=new QTableWidget(this);
        tbl_task_list->setMinimumHeight (150);
        tbl_task_list->setMaximumWidth (500);
        tbl_task_list->setColumnCount(5);
        tbl_task_list->verticalHeader()->setVisible(false);
        tbl_task_list->horizontalHeader()->setVisible(true);
        tbl_task_list->setShowGrid(true); //设置显示格子线
        tbl_task_list->setEditTriggers(QAbstractItemView::NoEditTriggers);
        tbl_task_list->setSelectionBehavior(QAbstractItemView::SelectRows);
        tbl_task_list->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    
        QStringList header_task;
        header_task<<"任务名称"<<"小车"<<"任务状态"<<"任务产生时间"<<"任务相应时间";
        tbl_task_list->setHorizontalHeaderLabels(header_task);
        tbl_task_list->setObjectName("tbl_task_list");
    
    /*
        //添加一行数据
        rows=tbl_task_list->rowCount ()+1;
        tbl_task_list->setRowCount (rows);
        addTaskItem("111",rows-1,0);
        addTaskItem("222",rows-1,1);
        addTaskItem("333",rows-1,2);
        addTaskItem("444",rows-1,3);
        addTaskItem("555",rows-1,4);
    
        //添加一行数据
        rows=tbl_task_list->rowCount ()+1;
        tbl_task_list->setRowCount (rows);
        addTaskItem("aaa",rows-1,0);
        addTaskItem("bbb",rows-1,1);
        addTaskItem("cccc",rows-1,2);
        addTaskItem("dddd",rows-1,3);
        addTaskItem("eeee",rows-1,4);
    void Widget::addTaskItem(QString data,int row ,int col)
    {
        QTableWidgetItem *item = new QTableWidgetItem(data);
        QFont font;
        font.setFamily ("Verdana");
        font.setBold (false);
        font.setPixelSize (12);
        item->setFont(font);
        item->setTextAlignment (Qt::AlignCenter);
        tbl_task_list->setItem(row,col,item);
    }

    2. 隐藏列表头和行表头,#include <QHeaderView>

      tbMotorWidget->verticalHeader()->setVisible(false); //隐藏列表头
      tbMotorWidget->horizontalHeader()->setVisible(false); //隐藏行表头

    隐藏列 tw->setColumnHidden(0,true);

    取隐藏列值tw->item(row,0)->text();

    可以用来取数据库的id值,更新数据和删除数据很有用。

    3. 设置表头的背景色

    tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:#00BFFF;}");

    4. 隐藏滚动条

    twInfo->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
    twInfo->setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOff);

    5. 设置垂直头不可见,即左边序号不见

             tableWidget->verticalHeader()->setVisible(true);//显示行序号1,2,3...

    6. 每添加一条数据滚动条自动到底

           tableWidget->scrollToBottom();

    7. 文本居中显示 

     QTableWidgetItem *item = new QTableWidgetItem(data);
     QFont font;
     font.setFamily ("Verdana");
     font.setBold (false);
     font.setPixelSize (12);
     item->setFont(font);
     item->setTextAlignment (Qt::AlignCenter);
     return item;

    8. 指定表头字体

     QFont font;
     font.setBold(true);  
     tableWidget->horizontalHeader()->setFont(font);

    9. 设置表头的内容充满整个表格的宽度

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

    10. 选择行 

        tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次一行
        tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、Ctrl+A都可以)

      

    11.QTableWidget使用setCellWidget设置控件默认是塞满填充的,如果强制设置了控件的尺寸,则默认左上角开始放置,有时候这种情况很难看,需要居中显示,QTableWidget可以设置文本居中显示,但是不能设置控件居中显示。使用如下方法可以实现: 

     if(tbDataWidget->rowCount()==0)
        {
            tbDataWidget->setRowCount(5);
            for(int i=0;i<5;i++)
            {
                addTableCheckItem(i);
    
                QPushButton *btnColor=new QPushButton(this);
                btnColor->setMinimumSize(15,15);
                btnColor->setMaximumSize(15,15);
                setButtonColor(btnColor,getRandomColor());
                QWidget *btnWidget = new QWidget;
                QHBoxLayout *hLayout = new QHBoxLayout(this);
                hLayout->setSpacing(0);
                hLayout->setMargin(0);
                hLayout->addWidget(btnColor);
                btnWidget->setLayout(hLayout);
                tbDataWidget->setCellWidget(i,0,btnWidget);
                connect(btnColor,&QPushButton::clicked,[=](){
                           slotColorButtonClicked(i);
                       });
    
            }
    
        }
    void OperationWidget::slotColorButtonClicked(int row)
    {
    
        QWidget *widget = (QWidget *)tbDataWidget->cellWidget(row, 0);
        QPushButton *btn = (QPushButton *)widget->children().at(1);
        QColor c = QColorDialog::getColor(Qt::blue);
    
        setButtonColor(btn,c);
    }
    void OperationWidget::setButtonColor(QPushButton *btn, QColor c)
    {
        btn->setStyleSheet("background-color:rgb("+QString::number(c.red())+","
                                +QString::number(c.green())+","
                                +QString::number(c.blue())+");");
    }

    12.点击单元格触发事件

     connect(tbDataWidget,SIGNAL(cellClicked(int,int)),this,SLOT(slotTableItemSelected(int,int)));

    void OperationWidget::slotTableItemSelected(int row, int col)
    {
    
    
        if(tbDataWidget->item(row,3)->checkState()==Qt::Checked)
        {
           emit sigShowSelectedValue(true,tbDataWidget->item(row,0)->text());
        }
        else
        {
           emit sigShowSelectedValue(false,tbDataWidget->item(row,0)->text());
        }
    }

    13. 清除

    tableWidget->clear();//清除所有可见数据(包括表头),行还在
    tableWidget->clearContents();//只清除表中数据,不清除表头内容
    tableWidget->setRowCount(0);//连行也清除掉
    

    14. 添加控件,获得控件触发的行   

     QSlider *slider=new QSlider(this);
     slider->setOrientation(Qt::Horizontal);
     slider->setMinimum(1100);
     slider->setMaximum(1900);
     slider->setSingleStep(1);
    
     connect(slider, SIGNAL(valueChanged(int)), this, SLOT(slotSilderValueChange(int)));
     tbMotorWidget->setCellWidget(i,3,slider);
    
    void OperationWidget::slotSilderValueChange(int value)
    {
        QSlider *senderObj=qobject_cast<QSlider*>(sender());
        if(senderObj == nullptr)
        {
            return;
        }
        QModelIndex idx =tbMotorWidget->indexAt(QPoint(senderObj->frameGeometry().x(),senderObj->frameGeometry().y()));
        int row=idx.row();
        qDebug()<<"row"<<row;
    }
    

    15. 某一列禁止编辑 

    QTableWidgetItem *item = new QTableWidgetItem(data);
    if(!isIsEditable)
    {
        item->setFlags(item->flags() & (~Qt::ItemIsEditable));
    }

    16.设置某一列宽度

    tableWidget->setColumnWidth(0, 30);'

    17.平均分配剩余的空白

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

    tw->horizontalHeader()->setSectionsClickable(false);

     

     

    
    
  • 相关阅读:
    PHP5中PDO的简单使用
    Apache中设置默认首页的方法
    PHP数组读取的循环操作
    header("Location:login.php")应该注意的几个问题
    纯JavaScript实现弹出选择第几个单选按钮
    PHP关于错误抑制符@的使用
    CSS盒子模型
    Appache中的ServerAlias
    PHP move_uploaded_file() 函数 定义和用法
    PHP ob_start() 函数介绍
  • 原文地址:https://www.cnblogs.com/ike_li/p/10207137.html
Copyright © 2011-2022 走看看