QTableWidget&QTableView表格美化

本文主要是一个表格的Demo (间隔变色的功能)。涉及到QTableview 和QtableWidget的一些功能。写的不好仅供参考:
图的样式如下:
在这里插入图片描述
头文件 .h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void  initTable();
private:
    Ui::MainWindow *ui;

};
#endif // MAINWINDOW_H

.cpp 文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QTableWidgetItem>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initTable();
}

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

void MainWindow::initTable()
{
    ui->table->setRowCount(7);   //7行
    ui->table->setColumnCount(6);   //6列
    ui->table->setFrameShape(QFrame::NoFrame); //设置边框
    ui->table->setFixedSize(500,212);   //固定大小
    ui->table->verticalHeader()->setVisible(false); //设置垂直头不可见
    ui->table->horizontalHeader()->setVisible(false);   //设置水平头不可见
    ui->table->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、 Ctrl+A都可以)
    ui->table->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次选择一行
    ui->table->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑
    ui->table->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
    ui->table->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);  //去掉垂直滚动条
    ui->table->setFont(QFont("Helvetica"));

    ui->table->setColumnWidth(0,80);
    ui->table->setColumnWidth(1,80);
    ui->table->setColumnWidth(2,80);
    ui->table->setColumnWidth(3,100);
    ui->table->setColumnWidth(4,80);
    ui->table->setColumnWidth(5,80);

    ui->table->setAlternatingRowColors(true);
    ui->table->setFrameShape(QFrame::NoFrame); //设置边框
    ui->table->setFocusPolicy(Qt::NoFocus); //去除选中虚线框

    QPalette palette;    //调色板
    palette.setColor(QPalette::Base, QColor(255,255,255));   //基底
    palette.setColor(QPalette::AlternateBase, QColor(233,245,252));  //交替基底
    ui->table->setPalette(palette);

    //表头列文本设置
    ui->table->setItem(0, 0, new QTableWidgetItem("第一列"));
    ui->table->setItem(0, 1, new QTableWidgetItem("第二列"));
    ui->table->setItem(0, 2, new QTableWidgetItem("第三列"));
    ui->table->setItem(0, 3, new QTableWidgetItem("第四列"));
    ui->table->setItem(0, 4, new QTableWidgetItem("第五列"));
    ui->table->setItem(0, 5, new QTableWidgetItem("第六列"));

    ui->table->item(0,0)->setTextColor(Qt::white);
    ui->table->item(0,0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->table->item(0,0)->setBackground(QColor(10, 53, 79));
    ui->table->item(0,0)->setFont(QFont("Helvetica",10,QFont::Bold));

    ui->table->item(0,1)->setTextColor(Qt::white);
    ui->table->item(0,1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->table->item(0,1)->setBackground(QColor(10, 53, 79));
    ui->table->item(0,1)->setFont(QFont("Helvetica",10,QFont::Bold));

    ui->table->item(0,2)->setTextColor(Qt::white);
    ui->table->item(0,2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->table->item(0,2)->setBackground(QColor(10, 53, 79));
    ui->table->item(0,2)->setFont(QFont("Helvetica",10,QFont::Bold));

    ui->table->item(0,3)->setTextColor(Qt::white);
    ui->table->item(0,3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->table->item(0,3)->setBackground(QColor(10, 53, 79));
    ui->table->item(0,3)->setFont(QFont("Helvetica",10,QFont::Bold));

    ui->table->item(0,4)->setTextColor(Qt::white);
    ui->table->item(0,4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->table->item(0,4)->setBackground(QColor(10, 53, 79));
    ui->table->item(0,4)->setFont(QFont("Helvetica",10,QFont::Bold));

    ui->table->item(0,5)->setTextColor(Qt::white);
    ui->table->item(0,5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->table->item(0,5)->setBackground(QColor(10, 53, 79));
    ui->table->item(0,5)->setFont(QFont("Helvetica",10,QFont::Bold));

    for( int i = 0; i < 6; i++ )
    {
        ui->table->setItem(i+1, 0, new QTableWidgetItem(QString("(%1,1)").arg(i+1)));
        ui->table->setItem(i+1, 1, new QTableWidgetItem(QString("(%1,2)").arg(i+1)));
        ui->table->setItem(i+1, 2, new QTableWidgetItem(QString("(%1,3)").arg(i+1)));
        ui->table->setItem(i+1, 3, new QTableWidgetItem(QString("(%1,4)").arg(i+1)));
        ui->table->setItem(i+1, 4, new QTableWidgetItem(QString("(%1,5)").arg(i+1)));
        ui->table->setItem(i+1, 5, new QTableWidgetItem(QString("(%1,6)").arg(i+1)));

        ui->table->item(i+1, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->table->item(i+1, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->table->item(i+1, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->table->item(i+1, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->table->item(i+1, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->table->item(i+1, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    }
}
### 如何使用QSS美化QTableWidget样式 #### 修改QHeaderView表头样式 为了使`QTableWidget`的表头更加美观,可以利用QSS定义其背景颜色、字体大小和其他属性。下面是一个简单的例子: ```css QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #68A5E7, stop:1 #4D90F1); color: white; padding-left: 4px; border: 1px solid #6c6c6c; } ``` 这段代码设置了线性渐变作为表头节区(`section`)的背景色,并调整了文字的颜色和边框样式[^1]。 #### 设置整个表格的外观 对于整体风格而言,可以通过设定网格线颜色、交替行颜色等参数让表格看起来更清晰易读: ```css QTableWidget { alternate-background-color: #f6f6f6; /* 交替行背景 */ gridline-color: gray; /* 网格线条颜色 */ } /* 当鼠标悬停于某一行时改变该行的颜色 */ QTableWidget::item:hover{ background-color:#eaeaea ; } ``` 这里配置了不同奇偶数目的行具有不同的底纹效果,同时也指定了当用户将光标移动到某个项目上时会发生的变化[^2]。 #### 自定义滚动条样式 为了让应用中的组件保持一致的设计感,还可以自定义`QScrollBar`部件以匹配应用程序的整体主题: ```css QScrollBar:vertical { width: 15px; margin: 21px 0 21px 0; border-image:url(:/images/vscroll-bg.png); } QScrollBar::handle:vertical { min-height: 20px; image:url(:/images/handle-vertical.png); } ... // 更多细节省略 ``` 此部分展示了垂直方向上的滚轮如何被重新设计成特定像资源的形式;同样地也可以针对水平滚动条做类似的处理。 #### 实现按钮样式的委托 如果希望在某些单元格内显示带有标的按钮,则可通过继承并重载`QStyledItemDelegate`类的方法来完成这一目标。这不仅限于单纯的文字展示,还允许加入更多交互元素如标或进度条等复杂控件。 ```python class ButtonDelegate(QStyledItemDelegate): def paint(self, painter, option, index): button_option = QStyleOptionButton() # ... 初始化button_option... QApplication.style().drawControl( QStyle.CE_PushButton, button_option, painter) def editorEvent(self, event, model, option, index): if not (event.type() == QEvent.MouseButtonPress and \ event.button() == Qt.LeftButton): return False self.parent().commitData.emit(editor) return True ``` 上述Python片段提供了一个基本框架用于创建一个能够渲染按钮的小部件代理对象。实际开发过程中还需要进一步完善逻辑以便响应用户的点击事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值