注:进度不是通过委托设置的,因为比较难。。。。
效果图:
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;
}