QT tableWidget的简单使用

这篇具有很好参考价值的文章主要介绍了QT tableWidget的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、不能对表格内容进行修改

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

设置某一列不可编辑

QTableWidgetItem *item1 = new QTableWidgetItem(“xxx”);   //设置第1列不可编辑
item1->setFlags(item1->flags() & (~Qt::ItemIsEditable));
ui->tableWidget->setItem(i, 0, item1);  //第0列不可编辑

2、设置表格为整行选择

ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

3、设置隐藏表头和列头

ui->tableWidget->verticalHeader()->setVisible(false); //列
ui->tableWidget->horizontalHeader()->setVisible(false);  //行

隐藏列

ui->tableWidget->setColumnHidden(i, true);     // i表示第几列

4、加入控件

ui->tableWidget->setShowGrid(false);    //关闭网格
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//选中一行

5、列可扩展

ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    // 列可扩展

6、单元格字体居中

ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); // i代表行,j代表列
void Mymethod::setTableAligCenter(QTableWidget *tw)
{
    int rowCount = tw->rowCount();
    int columCount = tw->columnCount();
    for(int row=0;row<rowCount;row++)
    {
        for(int colum=0;colum<columCount;colum++)
        {
            QTableWidgetItem* item = tw->item(row, colum);
            if(item != nullptr)
            {
                item->setTextAlignment(Qt::AlignCenter);//感觉效率不高
            }
        }
    }
}

7、获取行数和列数

ui->tableWidget->rowCount();
ui->tableWidget->columnCount();

8、右键使能,在给widget加菜单时,需要加入此行代码

ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);

9、给QTableWidget添加控件

ui->tableWidget->setCellWidget(i, j , widget);    //其中i代表行号,j代表列号,widget代表控件
例1:
QPushButton *pBtn = new QPushButton("查看");
ui->tableWidget->setCellWidget(0,0,pBtn);
例2:
QWidget *widget = new QWidget;
widget->setMaximumSize(ui->tableWidget->width(),ui->tableWidget->height());
QPushButton *pBtn = new QPushButton("查看");
QPushButton *pBtn1 = new QPushButton("修改");
QPushButton *pBtn2 = new QPushButton("删除");
QHBoxLayout *hbox = new QHBoxLayout(widget);
hbox->addWidget(pBtn);
hbox->addStretch(10);
hbox->addWidget(pBtn1);
hbox->addStretch(10);
hbox->addWidget(pBtn2);
hbox->setMargin(0);
widget->setLayout(hbox);
ui->tableWidget->setCellWidget(0, 1, widget);

10、获取当前点击的控件在表的那个位置

//一个单元格内单个控件,以pushButton为例

QPushButton *btn = (QPushButton *)sender();
int x = btn ->mapToParent(QPoint(0,0)).x();
int y = btn ->mapToParent(QPoint(0,0)).y();
QModelIndex index = ui->tableWidget->indexAt(QPoint(x,y));
int row = index.row();
int column = index.column();

//一个单元格内多个控件

QPushButton *btn = (QPushButton *)sender();
QWidget *w = (QWidget *)btn->parent();
int x = w->mapToParent(QPoint(0,0)).x();
int y = w->mapToParent(QPoint(0,0)).y();
QModelIndex index = ui->tableWidget->indexAt(QPoint(x,y));
int row = index.row();
int column = index.column();

11、设置单元格内字体颜色

QTableWidgetItem *item = new QTableWidgetItem;
item->setText("哈哈");
item->setTextColor(QColor("red"));  // 设置字体透明1
//item->setForeground(QBrush(QColor("red")));  // 设置字体透明2
ui->tableWidget->setItem(0,0,item);  // 在第0行0列的地方插入颜色是红色的"哈哈"两字

12、 设置单元格的颜色

ui->tableWidget->setRowCount(5);

for(int i = 0; i< ui->tableWidget->rowCount(); i++){
    QTableWidgetItem *item = new QTableWidgetItem;
    item->setText("哈哈");
    item->setBackground(QBrush(QColor("red")));  // 设置单元格颜色
    ui->tableWidget->setItem(i,0,item);
}

13、设置tablewidget背景透明

QPalette pll = m_tableWidget->palette();  
pll.setBrush(QPalette::Base,QBrush(QColor(255,255,255,0)));  
m_tableWidget->setPalette(pll);

或者

ui->tableWidget->setStyleSheet("background-color: transparent;");

14、例:

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenu>
#include <QAction>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void initTableWidget();

private slots:
    void MenuSlot(QAction *action);
    void showMenuPos(QPoint);

private:
    Ui::MainWindow *ui;
    QMenu *menu;
    QAction *addColumn, *reColumn, *addRow, *reRow;
};

#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QDebug>
#include <QPoint>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initTableWidget();
    QObject::connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenuPos(QPoint)));
    QObject::connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(MenuSlot(QAction*)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

/*****************************************************************/
//作者:
//函数名称:initTableWidget
//函数参数:NULL
//函数返回值:NULL
//函数作用:初始化表格
//备注:NULL
/*****************************************************************/
void MainWindow::initTableWidget()
{
    ui->tableWidget->setRowCount(3);
    ui->tableWidget->setColumnCount(2);
    QStringList strList ;
    strList << "时间" << "年限";
    ui->tableWidget->setHorizontalHeaderLabels(strList);
    ui->tableWidget->verticalHeader()->setVisible(false);
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);       // 右键使能
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("张飞"));
    ui->tableWidget->setItem(1,0,new QTableWidgetItem("关羽"));
    ui->tableWidget->setItem(2,0,new QTableWidgetItem("吕布"));

    ui->tableWidget->setItem(0,1,new QTableWidgetItem("35"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("36"));
    ui->tableWidget->setItem(2,1,new QTableWidgetItem("32"));


    menu = new QMenu(ui->tableWidget);
    addColumn = new QAction(menu);
    addColumn->setText("新增一列");
    reColumn = new QAction(menu);
    reColumn->setText("删除一列");
    addRow = new QAction(menu);
    addRow->setText("新增一行");
    reRow = new QAction(menu);
    reRow->setText("删除一行");
    menu->addAction(addRow);
    menu->addAction(addColumn);
    menu->addAction(reRow);
    menu->addAction(reColumn);
    int column = ui->tableWidget->columnCount();
    for(int i = 0; i<column;i++)
    {
        ui->comboBox->addItem(ui->tableWidget->horizontalHeaderItem(i)->text());
    }
}

/*****************************************************************/
//作者:
//函数名称:MenuSlot
//函数参数:action
//函数返回值:NULL
//函数作用:根据行为判断当前所做的事
//备注:NULL
/*****************************************************************/
void MainWindow::MenuSlot(QAction *action)
{
    int column = ui->tableWidget->columnCount();
    int row = ui->tableWidget->rowCount();
    if(action == addRow)
    {
        ui->tableWidget->insertRow(row);
        for(int i = 0; i<row;i++)
        {
            ui->tableWidget->setItem(row,i,new QTableWidgetItem("张飞"));
        }
    }
    else if(action == addColumn)
    {
        if(!ui->lineEdit->text().isEmpty())
        {
            ui->tableWidget->insertColumn(column);
            ui->tableWidget->setHorizontalHeaderItem(column, new QTableWidgetItem(ui->lineEdit->text()));
            ui->comboBox->addItem(ui->lineEdit->text());
        }
        else {
            qDebug() << "添加失败!!!";
            return ;
        }

    }
    else if (action == reRow) {
        ui->tableWidget->removeRow(ui->tableWidget->currentRow());
    }
    else if (action == reColumn) {
        for(int i = 0; i<column;i++)
        {
            if(ui->tableWidget->horizontalHeaderItem(i)->text() == ui->comboBox->currentText())
            {
                ui->tableWidget->removeColumn(i);
                ui->comboBox->removeItem(i);
            }
        }
    }
}

/*****************************************************************/
//作者:
//函数名称:showMenuPos
//函数参数:NULL
//函数返回值:NULL
//函数作用:右键菜单显示位置
//备注:NULL
/*****************************************************************/
void MainWindow::showMenuPos(QPoint)
{
    menu->exec(QCursor::pos());
}

.ui

qt tablewidget,qt,ui,开发语言

运行结果:

qt tablewidget,qt,ui,开发语言文章来源地址https://www.toymoban.com/news/detail-649811.html

原文链接:QT tableWidget的简单使用-Qt开发中文网

到了这里,关于QT tableWidget的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT-TableWidget多个行或者列合并效果

    使用代理,重新组合了行和列的合并,符合更多的实际应用场景,通过参数的方式,可以自定义设置想要的效果。 https://download.csdn.net/download/u013083044/86784759

    2024年02月15日
    浏览(36)
  • qt设置tablewidget颜色、添加选择框、添加按钮和进度条

    添加选择框 在代码中设置tablewidget的样式表 设置表格,添加选择框 cellClicked事件响应,当点击表格项,对复选框进行选中和取消选择 添加进度条和按钮 设置表格 建立按钮和处理函数的信号槽连接,让按钮点击,进度条移动 槽函数和进度条控件 项目下载 https://download.csdn.n

    2024年02月11日
    浏览(58)
  • QT 实现tablewidget整行的上下移动和双击编辑

    一、效果展示 二、实现方法 1、先对tablewidget设置 2、实现行的上下移动 主要实现方式是通过交换两行的数据来实现的 下面这两句主要实现选择行跟随移动的行

    2024年02月11日
    浏览(52)
  • 关于在Qt中tableWidget表格中有按钮或者chebox选择点击事件

    这里以checkbox为例: 基本思路:使用槽函数监听checkBox的改变,获取点击checkBox所在的行数和列数 槽函数

    2024年02月05日
    浏览(47)
  • Qt中多ui使用及简单布局实现交互界面

    第一章 Qt中C++代码搭配UI文件实现交互界面 第二章 Qt中多ui使用及简单布局实现交互界面 文章目录 前言 一、新增两个新UI文件 二、使用这两个新增的UI及简单布局 三.添加简单联动逻辑 四.编译运行及动态效果展示 总结         前一段时间,写了一篇关于Qt中C++代码搭配

    2024年02月04日
    浏览(56)
  • tableWidget设置滚动条不显示问题

    参数设置 为什么我设置了滚动条却没有显示? 在一次项目开发中,我用到了QTableWidget,开发中采用了Qt中的UI设计师完成界面的布局设计,QTableWidget我设置了最小的宽 400,高200,但是我把主窗口缩小到很小,界面并没有显示滚动条,然后我就调用代码Qt::ScrollBarAlwaysOn 让滚动

    2024年02月11日
    浏览(52)
  • Qt教程 — 2.1 如何使用Qt Designer 开发UI程序

    目录 1 Qt Designer简介 2 编辑UI界面 2.1 在 UI 界面添加一个Label 2.2 在 UI 界面添加一个按钮 2.3 在 UI 文件里连接信号与槽 方法一:通过信号和槽编辑栏 方法二:通过导航区信号和槽编按钮 方法三:通过跳转编辑代码实现—通过按钮输出文字 Qt Designer 是属于 Qt Creator 的一个功能

    2024年03月22日
    浏览(56)
  • pyqt 在tablewidget表格控件里添加 buttom按钮控件

       说明一下:在designer里!是没有办法再tablewidget的表格上添加其他控件了,按钮啊!标签啊!都不可以!你改样式表也没用! 所以只能再代码成面改了,你把.ui文件转成.py文件。在python文件里添加下面的代码就行!(要修改) 上面的代码都注释了,要改的会报错的,其他

    2024年02月13日
    浏览(38)
  • QT Designer 生成的ui文件转化成py文件以及简单使用

    首先用QTdesigner 设计你的界面 然后保存成.ui文件 这一步大家应该都可以做到,就不细讲了 然后就是转换步骤 使用cmd进入ui所在目录 或者在pycharm项目里的终端进入ui所在目录 然后输入下列语句 这里的outputUI就可以替换成你想要的输出文件名 InputUI就是你想要转换的ui文件名 稍

    2023年04月08日
    浏览(52)
  • 【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片

    1、Qt Creator快速入门_第三版__霍亚飞编著 2、《Qt+OpenCV显示图片(Mat转QImage然后显示在QLabel上)》 https://gitee.com/hiyanyx/qt5.14-cpp_-empty_-project/tree/Study2023-section5/ git分支“Study2023-section5” 新增ui类 新增使用opencv读取图片的普通类 为了更加方便,可在QT 中添加普通类,这样会自动生

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包