QTableWidget通过QSS美化

外观

在这里插入图片描述

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWidget; }
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();

private:
    Ui::MainWidget *ui;
};
#endif // MAINWIDGET_H

// mainwidget.cpp
#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QString>
#include <QFile>
#include <QTextStream>

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MainWidget)
{
    ui->setupUi(this);
    ui->tableWidget->verticalHeader()->setVisible(true);

    QString qss;
    QFile file(":/style.css");
    if (file.open(QFile::ReadOnly)) {
        QStringList list;
        QTextStream in(&file);
        while (!in.atEnd()) {
            QString line;
            in >> line;
            list << line;
        }

        file.close();
        qss = list.join("\n");
        QString paletteColor = qss.mid(20, 7);
        qApp->setPalette(QPalette(paletteColor));
        qApp->setStyleSheet(qss);
    }
}

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

// main.cpp
#include "mainwidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;
    w.show();
    return a.exec();
}

// style.css
* {
    outline: 0px;
    color: #DCDCDC;
    background: #444444;
}

QTableView {
    border: 1px solid #242424;
    selection-background-color: #646464;
    selection-color: #DCDCDC;
    alternate-background-color: #525252;
    gridline-color: #242424;
}

QTableView::indicator {
    padding: 0px 0px 0px 0px;
    width: 15px;
    height: 15px;
}

QTableView::indicator:unchecked {
    image:url(:/image/checkbox_unchecked.png);
}

QTableView::indicator:unchecked:disabled {
    image:url(:/image/checkbox_unchecked_disable.png);
}

QTableView::indicator:checked {
    image:url(:/image/checkbox_checked.png);
}

QTableView::indicator:checked:disabled {
    image:url(:/image/checkbox_checked_disable.png);
}

QTableView::indicator:indeterminate {
    image:url(:/image/checkbox_parcial.png);
}

QTableView::indicator:indeterminate:disabled {
    image:url(:/image/checkbox_parcial_disable.png);
}

QTableView::item:selected {
    color: #DCDCDC;
    background: #383838;
}

QTableView::item:hover {
    color: #DCDCDC;
    background: #525252;
}

QTableView::item {
    padding: 1px;
    margin: 0px;
    border: 0px;
}

/* 表格样式 */
QTableView QLineEdit,
QTableView QComboBox,
QTableView QSpinBox,
QTableView QDoubleSpinBox,
QTableView QDateEdit,
QTableView QTimeEdit,
QTableView QDateTimeEdit {
    border-width: 1px;
    border-radius: 0px;
}

/* 选中表格后样式 (此处QLineEdit:focus生效) */
QTableView QLineEdit:focus,
QTableView QComboBox:focus,
QTableView QSpinBox:focus,
QTableView QDoubleSpinBox:focus,
QTableView QDateEdit:focus,
QTableView QTimeEdit:focus,
QTableView QDateTimeEdit:focus {
    background-color: #3fd4f2;
    border-width: 3px;
    border-radius: 5px;
}

/* 滚动条样式 */
QScrollBar:horizontal {
    background:#484848;
    padding:0px;
    border-radius:6px;
    max-height:12px;
}

QScrollBar::handle:horizontal {
    background:#242424;
    min-width:50px;
    border-radius:6px;
}

QScrollBar::handle:horizontal:hover {
    background:#AAAAAA;
}

QScrollBar::handle:horizontal:pressed {
    background:#AAAAAA;
}

QScrollBar::add-page:horizontal {
    background:none;
}

QScrollBar::sub-page:horizontal {
    background:none;
}

QScrollBar::add-line:horizontal {
    background:none;
}

QScrollBar::sub-line:horizontal {
    background:none;
}

QScrollBar:vertical{
    background:#484848;
    padding:0px;
    border-radius:6px;
    max-width:12px;
}

QScrollBar::handle:vertical{
    background:#242424;
    min-height:50px;
    border-radius:6px;
}

QScrollBar::handle:vertical:hover {
    background:#AAAAAA;
}

QScrollBar::handle:vertical:pressed {
    background:#AAAAAA;
}

QScrollBar::add-page:vertical {
    background:none;
}

QScrollBar::sub-page:vertical {
    background:none;
}

QScrollBar::add-line:vertical {
    background:none;
}

QScrollBar::sub-line:vertical {
    background:none;
}

/* 表头样式 QTableCornerButton::section是tablewidget左上角那一小块 详见https://blog.csdn.net/qq_43627907/article/details/125677496 */
QHeaderView, QHeaderView::section, QTableView QTableCornerButton::section {
    color: #DCDCDC;
    background: #525252;
}

QHeaderView::section, QTableCornerButton:section {
    padding: 3px;
    margin: 0px;
    border: 1px solid #242424;
    border-left-width: 0px;
    border-right-width: 1px;
    border-top-width: 0px;
    border-bottom-width: 1px;
}

QHeaderView::section:disabled {
    background: #444444;
    border-color: #484848;
    color: #242424;
}

详见Github

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QTableWidgetQTableView是Qt框架中用于显示表格数据的两个类。QTableWidget是一个预定义的表格控件,可以直接在界面上使用,而QTableView是一个更灵活的类,可以与自定义的数据模型一起使用。 QSSQt Style Sheets)是一种用于设置Qt应用程序界面样式的机制。它类似于CSS(Cascading Style Sheets),可以通过设置样式属性来改变控件的外观和布局。 下面是一个使用QTableWidgetQTableView的例子: 1. 使用QTableWidget创建表格并设置数据: ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem app = QApplication([]) table_widget = QTableWidget(3, 3) # 创建一个3行3列的表格 # 设置表头 table_widget.setHorizontalHeaderLabels(['Name', 'Age', 'Gender']) # 设置数据 data = [['Alice', '25', 'Female'], ['Bob', '30', 'Male'], ['Charlie', '35', 'Male']] for row, row_data in enumerate(data): for col, col_data in enumerate(row_data): item = QTableWidgetItem(col_data) table_widget.setItem(row, col, item) table_widget.show() app.exec_() ``` 2. 使用QTableView和自定义数据模型创建表格: ```python from PyQt5.QtWidgets import QApplication, QTableView, QStandardItemModel, QStandardItem app = QApplication([]) table_view = QTableView() # 创建数据模型 model = QStandardItemModel(3, 3) # 创建一个3行3列的数据模型 # 设置表头 model.setHorizontalHeaderLabels(['Name', 'Age', 'Gender']) # 设置数据 data = [['Alice', '25', 'Female'], ['Bob', '30', 'Male'], ['Charlie', '35', 'Male']] for row, row_data in enumerate(data): for col, col_data in enumerate(row_data): item = QStandardItem(col_data) model.setItem(row, col, item) table_view.setModel(model) table_view.show() app.exec_() ``` 3. 使用QSS设置表格样式: ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem app = QApplication([]) table_widget = QTableWidget(3, 3) # 创建一个3行3列的表格 # 设置表头 table_widget.setHorizontalHeaderLabels(['Name', 'Age', 'Gender']) # 设置数据 data = [['Alice', '25', 'Female'], ['Bob', '30', 'Male'], ['Charlie', '35', 'Male']] for row, row_data in enumerate(data): for col, col_data in enumerate(row_data): item = QTableWidgetItem(col_data) table_widget.setItem(row, col, item) # 设置表格样式 table_widget.setStyleSheet("QTableView {background-color: yellow;}") table_widget.show() app.exec_() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值