QT Widget: QT常见组件的属性

一、QPushButton
(1) m_btnBlueTooth->setStyleSheet("QPushButton{image:url(:/title/icons/music_title_select_bg.png);border-style:none;color:#FEFEFE;padding-top:10px;text-align:top;}");
上述代码设置按键背景图片,按键文字颜色,按键文字在按键顶部且距离上边缘10个像素。
text-align: bottom : 文字在图片的下边。其他同理

(2)设置按钮不同状态样式

QString style = "QPushButton{background-color: transparent;border-style:none;color:#FEFEFE;padding-top:12px;text-align:top;outline: none;}";

    style += "QPushButton:hover{image:url(:/title/icons/music_title_select_bg.png);border-style:none;color:#00F0FF;}";

    style += "QPushButton:pressed{image:url(:/title/icons/music_title_select_bg.png);border-style:none;color:#00F0FF;padding-top:12px;text-align:top;}";

    style += "QPushButton:checked{image:url(:/title/icons/music_title_select_bg.png);border-style:none;color:#00F0FF;padding-top:12px;text-align:top;}";
 button->setStyleSheet(style);

(3)占位隐藏

    button->hide();
    QSizePolicy sp_retain = button->sizePolicy();
    sp_retain.setRetainSizeWhenHidden(true);//false 不占位隐藏
    button->setSizePolicy(sp_retain);

(4) 去掉选中状态下按键周边虚框

outline: none;

QLabel :设置文字在QLabel中居中;
QLabel *label = new QLabel(“86/145”);
label->setFixedSize(260,52);
label->setAlignment(Qt::AlignCenter);

二、水平布局QHBoxLayout
(1)基本用法

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4,1,Qt::AlignLeft | Qt::AlignTop);// 添加button4 ,并添加弹性控件,并且button4左侧靠近button3且位于水平布局的顶部。
layout->addWidget(button5);
layout->addStretch();
layout->setAlignment(Qt::AlignTop);// 设置布局中的组件在布局的顶部

this->setLayout(layout);

重点:layout->addSpacing(int) 与 layout->setSpacing(int) 不同。
layout->addSpacing(int) ,用在addWidget()方法之间,设置两个控件之间的距离。
layout-.>setSpacing(int), 用在addWidget()方法之前,设置布局中每两个控件之间的距离(控件之间的距离相同)
(2) 设置布局中控件之间的距离

layout->setSpacing(15);

(3)设置布局外边距

layout->setContentsMargins(30, 5, 5, 5);// 左,上,右,下
 layout->setMargin(int) // 可以设置左、上、右、下的外边距,设置之后,他们的外边距是相同的。

(4)设置组件在布局中的位置

layout->addWidget(button1, 0, Qt::AlignLeft | Qt::AlignTop);// button1:水平居左,垂直居上

(5)设置布局方向

layout->setDirection(QBoxLayout::RightToLeft); // 水平方向从右到左;
layout->setDirection(QBoxLayout::TopToBottom); // 垂直方向从上到下

(6)设置组件距离右侧距离

button->setStyleSheet("QPushButton{image:url(:/title/icons/music_title_setting_unselect.png);border-style:none;padding-right:20px}");

(7) 设置组件(布局)在布局中居中:

QVBoxLayout *layout = new QVBoxLayout(this);
    m_lAlbumTitle = new QLabel("周杰伦摩天轮世界演唱会",this);
    m_lAlbumTitle->setAlignment(Qt::AlignHCenter);// Qt::AlignVCenter,Qt::AlignHCenter,Qt::AlignCenter;Qt::AlignTop
    layout->addWidget(m_lAlbumTitle);
    setLayout(layout);

三、QProgressBar


void MainWindow::initView()
{
    //设置边框
    ui->progressBar->setStyleSheet("QProgressBar{text-align:center;background-color:#DDDDDD;border: 1px solid #ff0000;}"
                                    "QProgressBar::chunk{background-color:#05B8CC;}");
 
    //文字居中 text-align:center;
    //设置圆角 border-radius 这里要注意如果设置的圆角大于或等进度条高度的一半,圆角设置无效, 比如进度条的高度为10, 圆然设置为5px或以上就不会起作用
    ui->progressBar_2->setStyleSheet("QProgressBar{text-align:center;background-color:#DDDDDD;border: 0px solid #DDDDDD;border-radius:5px;}"
                                     "QProgressBar::chunk{background-color:#05B8CC; border-radius: 5px;}");
 
    //块显示
    ui->progressBar_3->setStyleSheet("QProgressBar{text-align:center;background-color:#DDDDDD;border: 0px solid #DDDDDD;border-radius:5px;}"
                                     "QProgressBar::chunk{background-color:#05B8CC;border-radius:5px; width:8px;margin:0.5px;}");
 
    //进度块渐变
    ui->progressBar_4->setStyleSheet("QProgressBar{height:22px; text-align:center; font-size:14px; color:white; border-radius:11px; background:#1D5573;}"
                                   "QProgressBar::chunk{border-radius:11px;background:qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 #99ffff,stop:1 #9900ff);}");
 
}
 
void MainWindow::initData()
{
 
    //设置进度值
    ui->progressBar->setValue(80);
    ui->progressBar_2->setValue(70);
    ui->progressBar_3->setValue(60);
    ui->progressBar_4->setValue(50);
    //隐藏百分百文字
    ui->progressBar_4->setTextVisible(false);

————————————————
原文链接:https://blog.csdn.net/chenyijun/article/details/125866213

四、QListWidget

// .h文件
// 定义
QListWidget m_listWidget;

// .c++ 文件
m_listWidget.setObjectName("video_listWidget");
m_listWidget.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);// 当item文字太长时,不显示横向scrollbar,切文字用...省略
m_listWidget.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_listWidget.setParent(this);
//设置视图显示方式为图标模式(图标在上,文字在下)
m_listWidget->setViewMode(QListView::IconMode); // ListMode:图标在左,文字在右,或者无图标
QScroller::grabGesture(&m_listWidget, QScroller::LeftMouseButtonGesture);  // 添加这句话 表格可拖拽。
//设置无边框
    listWidget->setFrameShape(QFrame::NoFrame);
    //设置子项不能被拖拽
    listWidget->setDragEnabled(false);
    //设置子项每个图标的大小
    listWidget->setIconSize(QSize(200,200));
    //设置每个子项的大小固定
    listWidget->setUniformItemSizes(true);
    //设置QLisView大小改变时,图标的调整模式,默认是固定的,可以改成自动调整
    listWidget->setResizeMode(QListView::Adjust);
    //设置每个子项之间的间距
    listWidget->setSpacing(10);
m_listWidget.addItem("11111111111111");
m_listWidget.addItem("22222222");
m_listWidget.show();

// .qss
QListWidget#video_listWidget {
    min-height:630px; // listView 最小高度
    min-width:337px; //  listView 最小宽度
    max-width:337px; //  listView 最大宽度
    background-image: url(:/usb/icons/music_list_background.png); // 设置listview背景(图片设置)
    background-color:#01C9D6; // 设置listView背景(颜色设置)
    color:white; // item文字颜色
    border: 1px solid transparent; // 设置listview边框,宽度1像素,颜色透明
    outline: none; // 文字/ item边框
    font: normal bold 20px; // 设置文字大小
}
QListWidget#video_listWidget::item{
    min-height:40px;// 每个item的最小高度
    padding:10px; // 设置每个item 四边边距
    padding-top:50px; // 设置每个item上边距
    padding-left:30px;
    color:white; // item正常状态下文字颜色
    outline: none;
    font: normal bold 20px; // item正常状态下文字大小
    border-style: none;
}

QListWidget#video_listWidget::item::selected {
    color: #01C9D6; // item点击状态下文字颜色
    outline: none;
}

五、QLabel(文字显示)
1、固定长度:m_label.setFixedWidth(300);
2、在垂直布局中,水平居中:

    QVBoxLayout *vBoxLayout = new QVBoxLayout(this);
    m_label.setFixedWidth(300);
    m_label.setAlignment(Qt::AlignHCenter);
    vBoxLayout->addWidget(&m_label,0,Qt::AlignHCenter);

3、文字过长时自动换行。


QLabel *label = new QLabel(this);
label->setText(QString::fromUtf8("这是一段非常非常长的文本,需要自动换行显示。"));
label->setWordWrap(true); // 启用自动换行

截断并添加省略号
QLabel *label = new QLabel(this);
label .setFixedWidth(300);
QString str= “1111111111111111111111111111111111111”;
QFontMetrics metrics(label .font());
if (metrics.width(str) > label .width())
{
str= QFontMetrics(label .font()).elidedText(str, Qt::ElideMiddle, label .width());
}
label .setText(str);

六、QTableView
1、隐藏垂直滚动条

tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

2、隐藏行号

tableView->verticalHeader()->hide();// 隐藏行号

3、设置行高

tableView->verticalHeader()->setDefaultSectionSize(45);// 设置行高

七、QString
1、数字“1”输出为“01”

int number = 1;
QString formattedNumber = QString("%1").arg(number, 2, 10, QLatin1Char('0'));

八、QTableWidget
//使行列头自适应宽度,最后一列将会填充空白部分,也可以实现充满窗体

table->horizontalHeader()->setStretchLastSection(true);

//使行列头自适应宽度,所有列平均分来填充空白部分

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

//使行自适应高度,假如行很多的话,行的高度不会一直减小,当达到一定值时会自动生成一个QScrollBar

table->verticalHeader()->setResizeMode(QHeaderView::Strtch);

//设置单击选择一行

table->setSelectionBehavior(QAbstractItemView::SelectRows);

//设置表格内容不可编辑

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

//设置某一列或某一行不可编辑,需要使用每个item不能编辑的来设置。不能设置表格内容不可编辑

item = new QTableWidgetItem(str);

item->setFlags(item->flags() & (~Qt::ItemIsEditable));

//设置只能选择一行,不能选择多行

table->setSelectionMode(QAbstractItemView::SingleSelection);

/去掉每行的行号,左侧自增行号/

QHeaderView *headerView = table->verticalHeader();

headerView->setHidden(true);

/设置让某个单元格或某行选中/

选中单元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);

选中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此处的列没有值)

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

//设置每行内容不可更改

ui->friendList->setAlternatingRowColors(true);

//设置隔一行变一颜色,即:一灰一白

setAlternatingRowColors(true);//任意单击都选中一行setSelectionBehavior(QAbstractItemView::SelectRows);

//设置要选中高亮的行,这里会触发QTableWidget::itemClicked的信号

tableWidget->selectRow(row);

//取消高亮效果:

table->clearSelection()

//类似的API:setSelection()\selectAll()

//取消表头选中时候,高亮

->horizontalHeader()->setHighlightSections(false);

//内容居中, 设置具体单元格中字体

table->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

table->item(1, 0)->setBackgroundColor(QColor(0,60,10)); //背景颜色

table->item(1, 0)->setTextColor(QColor(200,111,100)); //字体颜色

table->item(1, 0)->setFont(QFont(“Helvetica”)); //字体风格

//显示图标:

tableWdiget->setItem(0,1,newQTableWidgetItem(QIcon(“:/image/cpu”),“cpu”));

设置图标的大小:setIconSize()

//默认行高 默认列宽

QTtableView或者QTableWidget的verticalHeader()->setDefaultSectionSize(15)可以设置tableview所有行的默认行高为15。

QTtableView或者QTableWidget的horizontalHeader()->setDefaultSectionSize(15)可以设置tableview所有列的默认列宽为15。

//根据不同的列设置不同的效果

ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);

ui->tableWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);

ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);

QTableWidget的用法总结
检索tablewidget的内容

//获取符合条件的cell索引
//Qt::MatchContains 会匹配出只要包含text的item的模糊匹配
//Qt::MatchRegExp 只包含text的item 完全匹配。
QList <QTableWidgetItem *> item = source->findItems(text,  Qt::MatchContains);   
for (int i = 0; i  < rC; i++)
{
  source->setRowHidden(i,  true);//隐藏所有行
}
if  (!item.isEmpty())//不为空
{
  for (int i = 0; i  < item.count(); i++)
  {
    source->setRowHidden(item.at(i)->row(),false);//item.at(i).row()输出行号
  }
}

item背景色

* item->setBackgroundColor(QColor(255,0,0));
* item->setBackground(QBrush(QColor(255, 0, 0)));

右键菜单
在这里插入图片描述

ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(show_contextMenu(QPoint)));
void Dg_Setting_Long::show_contextMenu(QPoint pos)//pos 是在table内的相对位置
{
    Q_UNUSED(pos);
    if(cmenu)//保证同时只存在一个menu,及时释放内存
    {
        delete cmenu;
        cmenu = nullptr;
    }
QTableWidget *table = qobject_cast<QTableWidget*>(sender());
    cmenu = new QMenu(table);
 
    QAction* modColAction = cmenu->addAction("修改该行");
    QAction* delColAction = cmenu->addAction("删除该行");
    QAction* addColAction = cmenu->addAction("增加一行");
 
    connect(modColAction, SIGNAL(triggered(bool)), this, SLOT(action_mod()));
    connect(delColAction, SIGNAL(triggered(bool)), this, SLOT(action_del()));
    connect(addColAction, SIGNAL(triggered(bool)), this, SLOT(action_add()));
 
    cmenu->exec(QCursor::pos());//在当前鼠标位置显示
    //cmenu->exec(pos)是在viewport显示
} 

Qtablewidget表头的排序指示器:
table->horizontalHeader()->setSortIndicator(col,Qt::AscendingOrder);

在ui文件中table属性Header
表头可见/不可见
ui->tableWidget->horizontalHeader()->setVisible(true);
样式设置
添加复选框:改变选中和非选中的Icon。
->setStyleSheet()

QTableWidget::indicator  {
    width:  40px;
    height:  40px;
}
QTableWidget::indicator:unchecked  {
    image:  url(:/icon/unchecked.png);
}
QTableWidget::indicator:checked  {
    image:  url(:/icon/checked.png);
}

qss表头和滚动条属性:

//表示表头没有设置区域
QHeaderView{
font:14pt;
}
//v表示设置了表头的区域
QHeaderView::section  {
background-color:lightgray;color:  black;
padding-left:  4px;border: 1px solid #6c6c6c;
font:14pt '宋体';
}
QTableWidget  QHeaderView::section {
background-color:  rgb(210, 210, 210);color: black;
padding-left:  4px;border: 1px solid white;
font: 12pt  "微软雅黑";
height:40px;
}
 
/*table 滚动条*/
QScrollBar{
height:30px;
width:30px;
background-color:rgb(93,172,228);
}
//会把两端箭头消失
QScrollBar::handle{
background-color:  rgb(255, 0, 127);
}
QScrollBar::add-line:vertical  
QScrollBar::sub-line:vertical  

设置表头字体和背景

ui.tableWidget_grid->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:rgb(40,143,218);font:13pt  '宋体';color: white;};");

selection-background-color选中的背景色

QTableWidget 如何让左上角的方块不可点击
QTableWidget如何让左上角的方块不可点击

用Designer,在QTableView里面有一个cornerBottonEnabled,将其勾去掉。

用代码编写

setCornerButtonEnabled(true);

QTableWidget让Item不可编辑

将QAbstractItemView下的selectionMode改为NoSelection。

QTableWidget让Header不可点击

horizontalHeader()->setSectionsClickable(false); //水平方向的头不可点击

verticalHeader()->setSectionsClickable(false); //垂直方向的头不可点击

QTableView表格左上角样式
在这里插入图片描述

QScrollBar::handle:vertical  
{ 
background-color:  rgb(210, 210, 210);
}
QScrollBar:vertical{
width:22px;
background-color:rgb(214,214,214);
margin:30px  0px 30px 0px;
}
 
QScrollBar::add-page:vertical,  QScrollBar::sub-page:vertical
{
background-color:  rgb(255, 255, 255);
}
QScrollBar::up-arrow:vertical{
width:22px;
border-image:  url(:/images/FuncWidget/sarrowup.png);
}
QScrollBar::sub-line:vertical{
border:none;
subcontrol-origin:  margin;
height: 30px;
}
QScrollBar::add-line:vertical{
subcontrol-origin:  margin;
height:  30px;
border:none;
}
QScrollBar::down-arrow:vertical{
width:22px;
border-image:  url(:/images/FuncWidget/sarrowdown.png);
}
//红色部分为必须的
 
 
//表头支持箭头,样式
QHeaderView::up-arrow {}
QHeaderView::down-arrow {}

QListWidget与QTableWidget的使用以及样式设置
margin:10px 5px 15px 20px;上外边距是 10px
右外边距是 5px
下外边距是 15px
左外边距是 20px
说明

这个简写属性设置一个元素所有外边距的宽度,或者设置各边上外边距的宽度。

块级元素的垂直相邻外边距会合并,而行内元素实际上不占上下外边距。行内元素的的左右外边距不会合并。同样地,浮动元素的外边距也不会合并。允许指定负的外边距值,不过使用时要小心。

某一列内容自适应:
QTableWidget要调整表格行宽主要涉及以下一个函数

1.resizeColumnsToContents();

根据内容调整列宽

2.resizeColumnToContents(int col);

根据内容自动调整给定列宽

3.horizontalHeader()->setResizeMode

把给定列设置为给定模式

主要模式有Stretch和Fixed

qt designer中的设置
在UI设计界面中选中该控件之后可以在属性栏对控件的属性进行设置,最常用的属性有如下:

focusPolicy 焦点策略,如果设置为NoFocus可以去掉单击时候现实的单元格的虚线框

contextMenuPolicy 可以设置右键菜单

frameShape 设置外边框,一般设置为NoFrame去掉边框

editTriggers触发单元格的编辑状态,值NoEditTriggers表示不触发编辑状态

selectionMode选择模式,值ExtendedSelection表示多选

selectionBehavior选择行为,值SelectRows按行选择

showGrid是否显示网格线

rowCount行数

columnCount列数

horizontalHeaderVisible是否显示水平表头

verticalHeaderVIsible是否显示垂直表头

verticalScrollBarPolicy设置垂直滚动条策略

horizontalScrollBarPolicy设置水平滚动条策略

问题:对于水平的滚动条,可能会遇到左边的按钮没有显示的问题

QScrollBar:horizontal {
  height:22px;
  background-color:rgb(214,214,214);
  margin:0px 30px 0px 30px;
}
QScrollBar::handle:horizontal 
{ 
  background-color: rgb(210, 210, 210);
}
 
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
{
  background-color: rgb(255, 255, 255);
}
 
QScrollBar::left-arrow:horizontal{
  height:22px;
  width: 30px;
  border-image: url(:/images/FuncWidget/sarrowleft.png);
 
}
QScrollBar::sub-line:horizontal{
  border:none;
 
}
QScrollBar::right-arrow:horizontal{
  height:22px;
  border-image: url(:/images/FuncWidget/sarrowright.png);
}
 
QScrollBar::add-line:horizontal{
  subcontrol-origin: margin;
  width:30px;
  border:none;
}

QtableWidget****的使用
在item上添加控件:setCellWidget()

* 示例代码:位置可以通过添加widget,再添加布局来实现。
//按钮
++nSubItem;
QPushButton *bt = new QPushButton(tr("添加"));
bt->setObjectName(tr("bt_info_add"));
bt->setMinimumSize(145, 35);
bt->setMaximumSize(145, 35);
connect(bt, SIGNAL(clicked()), this, SLOT(bt_Click()));
QWidget *widget = new QWidget;
QHBoxLayout *hLayout;
hLayout = new QHBoxLayout();
//调用了addWidget 之后,窗体之间存在父子关系
hLayout->addWidget(bt);
hLayout->setMargin(0);
hLayout->setAlignment(widget, Qt::AlignCenter);
hLayout->setContentsMargins(10, 0, 10, 0);
widget->setLayout(hLayout);
ui->tableWidget->setCellWidget(row, nSubItem, widget);

在button的slot函数中,从sender得到button指针,根据这个button的位置(x,y),由tablewidget->itemAt(x,y)可得到modelindex,其中itemAt不受scroll影响.

用这个方法的好处是,从modelindex开始,能完全操作tablewidget.

QPushButton *bt = qobject_cast<QPushButton* >(sender());
QWidget *obj = qobject_cast<QWidget *>(bt->parent());
int x = obj->frameGeometry().x();//obj为你QPushButton
int y = obj->frameGeometry().y();
QModelIndex index = ui->tableWidget->indexAt(QPoint(x,y));
int row = index.row();
int column = index.column();

部分控件只有点击才能出现的功能,委托、代理;可以控制用户的输入。
接口:

void QAbstractItemView::setItemDelegate(QAbstractItemDelegate*delegate)

void QAbstractItemView::setItemDelegateForColumn(intcolumn,QAbstractItemDelegate*delegate)

void QAbstractItemView::setItemDelegateForRow(introw,QAbstractItemDelegate*delegate)

网址:https://www.devbean.net/2013/03/qt-study-road-2-view-delegate/

示例代码:下拉框的实现;

//参考值是否包含最大、最小值委托
/***
• createEditor():返回一个组件。该组件会被作为用户编辑数据时所使用的编辑器,从模型中接受数据,返回用户修改的数据。
• setEditorData():提供上述组件在显示时所需要的默认值。
• updateEditorGeometry():确保上述组件作为编辑器时能够完整地显示出来。
• setModelData():返回给模型用户修改过的数据。
**/
 
class RefValEqualDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    RefValEqualDelegate(QObject* parent = nullptr);
 
    ~RefValEqualDelegate();
 
    void paint(QPainter *painter, const QStyleOptionViewItem    &option,const QModelIndex &index) const;
 
    QSize sizeHint(const QStyleOptionViewItem    &option, const QModelIndex &index) const;
 
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem    &option, const QModelIndex &index) const;
 
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
 
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
};

#include "refvalequaldelegate.h"
#include <QComboBox>
#include "reportrangedlg.h"
# pragma execution_character_set("utf-8")
 
void RefValEqualDelegate::paint(QPainter *painter, const QStyleOptionViewItem    &option, const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);
}
 
QSize RefValEqualDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    return QStyledItemDelegate::sizeHint(option, index);
}
 
QWidget *RefValEqualDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem    &option, const QModelIndex &index) const
{
    if(index.isValid() &&
            (static_cast<int>(reference_column_index::REF_MIN_INCLUDED) == index.column() ||
            static_cast<int>(reference_column_index::REF_MAX_INCLUDED) == index.column()))
    {
        QComboBox* inputCombo = new QComboBox(parent);
        inputCombo->addItem(QObject::tr("是"));
        inputCombo->addItem(QObject::tr("否"));
 
        inputCombo->installEventFilter(const_cast<RefValEqualDelegate*>(this));
        return inputCombo;
    }
    else
    {
        return QStyledItemDelegate::createEditor(parent, option, index);
    }
}
 
void RefValEqualDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    if(index.isValid() &&
       (static_cast<int>(reference_column_index::REF_MAX_INCLUDED) == index.column() ||
        static_cast<int>(reference_column_index::REF_MIN_INCLUDED) == index.column()))
    {
        QString value = index.model()->data(index, Qt::DisplayRole).toString();
        QComboBox* inputCombo = qobject_cast<QComboBox*>(editor);
        if(!value.isEmpty())
        {
            inputCombo->setCurrentText(value);
        }
    }
    else
    {
        QStyledItemDelegate::setEditorData(editor, index);
    }
}
 
void RefValEqualDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    if(index.isValid() &&
            (static_cast<int>(reference_column_index::REF_MAX_INCLUDED) == index.column() ||
             static_cast<int>(reference_column_index::REF_MIN_INCLUDED) == index.column()))
    {
        QComboBox* inputCombo = qobject_cast<QComboBox*>(editor);
        model->setData(index, inputCombo->currentText());
    }
    else
    {
        QStyledItemDelegate::setModelData(editor, model, index);
    }
}

 

九、设置widget背景
方法一:
重写void paintEvent(QPaintEvent *event)方法

void MainWidget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)
    QPainter painter(this);
    QPixmap pixmap(":/icons/title.png");
    painter.drawPixmap(0, 0, width(), height(), pixmap);
}

方法二:

void MainWidget::setBackground() {
    QPixmap pixmap(":/icons/main_02.png"); // 替换为你的图片路径
   QPalette palette = this->palette();
   palette.setBrush(QPalette::Background, pixmap);
   this->setPalette(palette);
}

方法三:

// 在qss文件中加入:
QWidget#mainBackground {
    background-image: url(:/icons/main_02.png);
    background-repeat: no-repeat;
    background-position: center;
    background-attachment: fixed;
    border: none;
}

// 代码中添加
this->setObjectName("mainBackground");

十 QLineEdit

QLineEdit{
    border: 1px solid #ABCDA0;      /* 边框宽度为1px,颜色为#A0A0A0 */
    border-radius: 3px;             /* 边框圆角 */
    padding-left: 5px;              /* 文本距离左边界有5px */
    background-color: #F2F2F2;      /* 背景颜色 */
    color: black;                   /* 文本颜色 */
    selection-background-color: #A0A0A0;  /* 选中文本的背景颜色 */
    selection-color: #F2F2F2;         /* 选中文本的颜色 */
    font-family: "Microsoft YaHei";   /* 文本字体族 */
    font-size: 10pt;                  /* 文本字体大小 */
}
    
QLineEdit:hover { /* 鼠标悬浮在QLineEdit时的状态 */
    border: 1px solid #298DFF;
    border-radius: 3px;
    background-color: #F2F2F2;
    color: #298DFF;
    selection-background-color: #298DFF;
    selection-color: #F2F2F2;
}
    
QLineEdit[echoMode="2"] { /* QLineEdit有输入掩码时的状态 */
    lineedit-password-character: 9679;
    lineedit-password-mask-delay: 2000;
}

QLineEdit:disabled { /* QLineEdit在禁用时的状态 */
    border: 1px solid #CDCDCD;
    background-color: #CDCDCD;
    color: #B4B4B4;
}

QLineEdit:read-only { /* QLineEdit在只读时的状态 */
    background-color: #CDCDCD;
    color: #F2F2F2;
}

十一:QTreeWidget
链接:https://blog.csdn.net/mr_xiegousi/article/details/135018828
1、设置整体背景
QTreeWidget#treeWidget{
// 设置整体背景
outline:0px;
border:none;// 无边框
background: #C6CFD6;
color:#1D1D1D;
selection-background-color: #09B293;
}
// 设置item选中状态(branch 选中时整行颜色都会变成设置颜色)
QTreeWidget::item:selected, QTreeWidget::branch:selected{
border-left-color:transparent;
border-right-color:transparent;
border-top-color:transparent;
border-bottom-color:transparent;
background-color:#09B293;
}

// 父子item显示不同颜色时候我想的是
QTreeWidget::item::has-children,
QTreeWidget::branch:has-children{
border:none;
background: #2A2A2A;
color:#EAEAEA;
}

// 去掉节点之间的虚线
QTreeView::branch {image:none;}
或:treeWidget->setRootIsDecorated(false);

treeWidget->setObjectName(“treeWidget”);
2、隐藏列名(类似于表头)
treeWidget->setHeaderHidden(true);

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值