一、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);