QTableView委托以及样式表

8 篇文章 1 订阅

 

注:进度不是通过委托设置的,因为比较难。。。。

效果图:

ComboBox

QSpinBox

代码:widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QStyledItemDelegate>
#include <QDebug>
#include <QSpinBox>
#include <QComboBox>
#include <QProgressBar>

namespace Ui {
class Widget;
}


class MyItem;

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    QStandardItemModel * model;

};



class MyItem :public QStyledItemDelegate
{
    Q_OBJECT
public:
    MyItem(QObject * parent =0):QStyledItemDelegate(parent){}
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const
    {
        if(index.column() == 4)
        {
            QSpinBox *box = new QSpinBox(parent);
            return box;
        }
        else if(index.column() == 1)
        {
            QComboBox * cbox = new QComboBox(parent);
            QStringList list;
            list<<tr("自动导航")<<tr("指点飞行")<<tr("GPS模式");
            cbox->addItems(list);
            return cbox;
        }
        else
        {
            return NULL;
        }

    }
    void setEditorData(QWidget *editor, const QModelIndex &index) const
    {
        if(index.column() == 4)
        {
            int value = index.model()->data(index, Qt::EditRole).toInt();
            QSpinBox *spinBox = static_cast<QSpinBox*>(editor);

            spinBox->setValue(value);
        }
        else if(index.column() == 1)
        {

            QComboBox *comboBox = static_cast<QComboBox*>(editor);
            QString str = index.model()->data(index, Qt::EditRole).toString();
            comboBox->setCurrentIndex(comboBox->findText(str));

        }


    }
    void setModelData(QWidget *editor, QAbstractItemModel *model,
            const QModelIndex &index) const
    {
        if(index.column() == 4)
        {
            QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
            //spinBox->interpretText();
            int value = spinBox->value();
            model->setData(index, value, Qt::EditRole);
        }
        if(index.column() == 1)
        {
            QComboBox *comboBox = static_cast<QComboBox*>(editor);
            model->setData(index, comboBox->currentText(), Qt::EditRole);
        }



    }
     void updateEditorGeometry(QWidget *editor,
            const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        editor->setGeometry(option.rect);
    }



signals:
     void modificationReturnHeight(int uavid, float height) const;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->tableView->verticalHeader()->setHidden(true);

    ui->tableView->setItemDelegate(new MyItem);


    model = new QStandardItemModel;
    ui->tableView->setModel(model);
    QStringList tHead;
    tHead<<tr("序号")<<tr("飞行模式")<<tr("启动导航")<<tr("电池电量")<<tr("返航高度/M")<<tr("水平速度M/S")<<tr("垂直速度M/S")<<tr("距离/M");
    model->setHorizontalHeaderLabels(tHead);


    QList<QStandardItem *> list;
    for(int j=0;j<3;j++)
    {
        for(int i=0;i<3;i++)
        {
            if(i == 0)
            {
                list.push_back(new QStandardItem(QString::number(j)));
            }
            else
            {
                list.push_back(new QStandardItem);

            }

        }
        model->appendRow(list);
        list.clear();
    }


    QProgressBar * bar = new QProgressBar;
    bar->setObjectName("bar");
    bar->setFixedHeight(30);
    bar->setRange(0,100);
    bar->setValue(70);

    QProgressBar * bar1 = new QProgressBar;
        bar1->setObjectName("bar1");
    bar1->setFixedHeight(30);
    bar1->setRange(0,100);
    bar1->setValue(50);

    QProgressBar * bar2 = new QProgressBar;
        bar2->setObjectName("bar2");
    bar2->setFixedHeight(30);
    bar2->setRange(0,100);
    bar2->setValue(30);

    ui->tableView->setIndexWidget(model->index(0,3),bar);
    ui->tableView->setIndexWidget(model->index(1,3),bar1);
    ui->tableView->setIndexWidget(model->index(2,3),bar2);


}

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

QSS



QProgressBar#bar
{
	border:1px solid rgb(77,200,12);
	background: rgb(80,80,80);
	text-align: center;
	font: 75 10pt "Microsoft YaHei";
	color:rgb(200,200,200);
	border-radius:15px;
}
QProgressBar:chunk#bar
{
    border-radius:13px;
    background: rgb(77,200,12);
}

QProgressBar#bar1
{
	border:1px solid rgb(246,166,62);
	background: rgb(80,80,80);
	text-align: center;
	font: 75 10pt "Microsoft YaHei";
	color:rgb(230,230,230);
	border-radius:5px;
}
QProgressBar:chunk#bar1
{
    border-radius:13px;
    background: rgb(246,166,62);
}


QProgressBar#bar2
{
	border:1px solid rgb(250,60,14);
	background: rgb(80,80,80);
	text-align: center;
	font: 75 9pt "Microsoft YaHei";
	color:rgb(230,230,230);
	border-radius:4px;
	margin-top:10px;
	margin-bottom:10px;
}
QProgressBar:chunk#bar2
{
    border-radius:3px;
    background: rgb(250,60,14);
}

QComboBox
{
	border-radius:3px;
	background-color:rgba(60,60,60,200);
	font: 75 9pt "Microsoft YaHei";
    color:rgb(210,210,210);
    border:0px ;
	padding-top: 2px;
	padding-left: 2px;
}
QComboBox:disabled
{
	background-color:rgba(50,50,50,200);
	font: 75 9pt "Microsoft YaHei";
    color:rgb(160,160,160);
}
QComboBox:hover
{
	background-color:rgba(45,45,45,200);
	border:1px solid rgb(31,156,220) ;
}
/*点击combox的样式*/
QComboBox:on
{
	border-radius:3px;
	background-color:rgba(35,35,35);
	font: 75 9pt "Microsoft YaHei";
    color:rgb(210,210,210);
    border:1px solid rgb(31,156,220) ;
}
/*下拉框的样式*/
QComboBox QAbstractItemView 
{
    outline: 0px solid gray;  /*取消选中虚线*/
    border: 1px solid rgb(31,156,220);  
    font: 75 9pt "Microsoft YaHei";
    color: rgb(210,210,210);
    background-color: rgb(45,45,45);   
    selection-background-color: rgb(90,90,90);   
}
 /*选中每一项高度*/
QComboBox QAbstractItemView::item
 { 
	height: 25px;  
 }
 /*选中每一项的字体颜色和背景颜色*/
QComboBox QAbstractItemView::item:selected 
{
    color: rgb(31,163,246);
	background-color: rgb(90,90,90); 
}
 /*下拉箭头的边框*/
QComboBox::drop-down 
{
	border:none;
}
 /*下拉箭头样式*/
QComboBox::down-arrow 
{
    width: 9px;  
    height: 9px;   
    image: url(:/spinbox/combox_up.png);
}
 /*下拉箭头点击样式*/
QComboBox::down-arrow:on
{
    width: 9px;  
    height: 9px;   
    image: url(:/spinbox/combox_down.png);
}




QTableView
{
	background: rgb(55,55,55);
		outline:none;
}
QTableView{
    selection-background-color:rgb(255,0,0);
    background-color:rgb(50,50,50);
    border:1px solid rgb(70,70,70);
    color:rgb(200,200,200)
}


QTableView::item
{
       border:1px solid rgb(65,65,65);
	   
	/*color:rgb(200,200,200);*/

}
QTableView::item:hover
{
    background-color: rgb(35,35,35);
    font: 75 9pt "Microsoft YaHei";
   /* color:rgb(31,163,246);*/
}
QTableView::item::selected
{
    /*background-color: rgb(35,35,35);*/
    /*border:none;*/


	border-bottom:2px solid rgb(31,163,246);
	background-color: rgb(35,35,35);
    font: 75 9pt "Microsoft YaHei";
    color:rgb(40,160,255);
}




QHeaderView::section{
	
    background-color:rgb(90,90,90);
      color:rgb(200,200,200);
    border:1px solid rgb(60,60,60);
    border-bottom:1px solid rgb(70,70,70);
    height:27px;
    min-width:55px;
}
QHeaderView::section:hover
{
    background-color:rgb(80,80,80);

}


QSpinBox
{
	background-color:rgb(55,55,55);
	font: 75 10pt "Microsoft YaHei";
    color:rgb(200,200,200);
	border-radius:4px;
	qproperty-alignment:AlignHCenter;
}
QSpinBox:hover
{
	background-color:rgb(35,35,35);
}


QSpinBox:up-button 
{
    subcontrol-origin:border;
    subcontrol-position:right;
    image: url(:/spinbox/right.png);
    width: 13px;
    height: 13px;       
}
QSpinBox:down-button 
{
    subcontrol-origin:border;
    subcontrol-position:left;
    image: url(:/spinbox/left.png);
    width: 13px;
    height: 13px;
}
QSpinBox:up-button:hover
{subcontrol-origin:border;
    subcontrol-position:right;
    image: url(:/spinbox/right_hover.png);
    width: 13px;
    height: 13px;       
}
  
QSpinBox:down-button:hover
{
    subcontrol-position:left;
    image: url(:/spinbox/left_hover.png);
    width: 13px;
    height: 13px;
}
QSpinBox:up-button:pressed
{subcontrol-origin:border;
    subcontrol-position:right;
    image: url(:/spinbox/right_pressed.png);
    width: 13px;
    height: 13px;       
}
  
QSpinBox:down-button:pressed
{
    subcontrol-position:left;
    image: url(:/spinbox/left_pressed.png);
    width: 13px;
    height: 13px;
}

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QTableViewQt 框架中的一个控件,用于显示和编辑表格数据。它可以通过样式表来自定义其外观。以下是一个完整的 QTableView 样式表示例: QTableView { background-color: #ffffff; /* 设置背景颜色为白色 */ alternate-background-color: #f2f2f2; /* 设置交替行的背景颜色为浅灰色 */ selection-background-color: #a6c9e2; /* 设置选中行的背景颜色为淡蓝色 */ selection-color: #ffffff; /* 设置选中行的文字颜色为白色 */ gridline-color: #dcdcdc; /* 设置网格线的颜色为浅灰色 */ } QTableView::item { padding: 5px; /* 设置单元格内边距为5像素 */ } QTableView::item:selected { background-color: #a6c9e2; /* 设置选中单元格的背景颜色为淡蓝色 */ color: #ffffff; /* 设置选中单元格的文字颜色为白色 */ } QHeaderView::section { background-color: #f2f2f2; /* 设置表头的背景颜色为浅灰色 */ color: #000000; /* 设置表头的文字颜色为黑色 */ padding: 5px; /* 设置表头内边距为5像素 */ border: none; /* 去除表头的边框 */ } QHeaderView::section:checked { background-color: #a6c9e2; /* 设置选中表头的背景颜色为淡蓝色 */ color: #ffffff; /* 设置选中表头的文字颜色为白色 */ } QTableView::horizontalHeader { height: 30px; /* 设置水平表头的高度为30像素 */ } QTableView::verticalHeader { width: 50px; /* 设置垂直表头的宽度为50像素 */ } QTableView::horizontalHeader::section { height: 30px; /* 设置水平表头单元格的高度为30像素 */ } QTableView::verticalHeader::section { width: 50px; /* 设置垂直表头单元格的宽度为50像素 */ }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值