QSS 自定义QLineEdit


Chapter1 QSS 自定义QLineEdit

原文链接:https://blog.csdn.net/Staranywhere/article/details/107306276

在这里插入图片描述

简述

本文将通过简单示例介绍QLineEdit样式如何自定义。

常用属性和伪状态

QLineEdit通用属性如下:

border
border-radius
margin
padding
background
color
font
border-image
QLineEdit特有属性如下:

lineedit-password-character
The QLineEdit password character as a Unicode number.
lineedit-password-mask-delay
The QLineEdit password mask delay in milliseconds before lineedit-password-character is applied to visible character.
selection-background-color
selection-color
属性分类,请参考QSS系列:属性类型集合
QLabel常用伪状态如下:

default
hover
read-only
disabled
伪状态分类,请参考QSS系列:伪状态集合

效果图

简单定义QLabel在Normal、有输入掩码、ReadOnly、Disabled和有ClearButton下的样式。
在这里插入图片描述

QSS

如何使用样式表,请参考QSS系列:设置样式表

* {
	outline: none;
}

QDialog {
	background: #D6DBE9;
}

QLineEdit {
	border: 1px solid #A0A0A0; /* 边框宽度为1px,颜色为#A0A0A0 */
	border-radius: 3px; /* 边框圆角 */
	padding-left: 5px; /* 文本距离左边界有5px */
	background-color: #F2F2F2; /* 背景颜色 */
	color: #A0A0A0; /* 文本颜色 */
	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;
}

源码

main.cpp

#include "MainWindow.h"
#include <QtWidgets/QApplication>
#include <QFile>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

	//全局加载样式表
	QFile styleFile(":/Resource/DefaultTheme");
	if (styleFile.open(QIODevice::ReadOnly))
	{
		QString string = styleFile.readAll();
		qApp->setStyleSheet(string);
	}

    MainWindow w;
    w.show();
    return a.exec();
}

MainWindow.h、MainWindow.cpp

#ifndef MainWindow_H
#define MainWindow_H

#include <QDialog>
#include <QLineEdit>

#define FIXED_WIDTH 200
#define FIXED_HEIGHT 40

class MainWindow : public QDialog
{
	Q_OBJECT

public:
	MainWindow(QWidget *parent = Q_NULLPTR);

private:
	void Init();

private:
	QLineEdit *m_pNormalEdit;
	QLineEdit *m_pEchoEdit;
	QLineEdit *m_pReadOnlyEdit;
	QLineEdit *m_pDisabledEdit;
	QLineEdit *m_pClearEdit;
};
#endif // !MainWindow_H
#include "MainWindow.h"

#include <QBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QDialog(parent)
{
	Init();
}

void MainWindow::Init()
{
	//Normal QLineEdit
	m_pNormalEdit = new QLineEdit(this);
	m_pNormalEdit->setFixedSize(FIXED_WIDTH, FIXED_HEIGHT);

	//Input Mask QLineEdit
	m_pEchoEdit = new QLineEdit(this);
	m_pEchoEdit->setFixedSize(FIXED_WIDTH, FIXED_HEIGHT);
	m_pEchoEdit->setEchoMode(QLineEdit::Password); //设置QLineEdit有输入掩码

	//ReadOnly QLineEdit
	m_pReadOnlyEdit = new QLineEdit(this);
	m_pReadOnlyEdit->setFixedSize(FIXED_WIDTH, FIXED_HEIGHT);
	m_pReadOnlyEdit->setReadOnly(true);	//设置QLineEdit为只读状态
	m_pReadOnlyEdit->setText("ReadOnly");

	//Disabled QLineEdit
	m_pDisabledEdit = new QLineEdit(this);
	m_pDisabledEdit->setFixedSize(FIXED_WIDTH, FIXED_HEIGHT);
	m_pDisabledEdit->setEnabled(false); //设置QLineEdit为禁用状态
	m_pDisabledEdit->setText("Disabled");

	//ClearButton QLineEdit
	m_pClearEdit = new QLineEdit(this);
	m_pClearEdit->setFixedSize(FIXED_WIDTH, FIXED_HEIGHT);
	m_pClearEdit->setClearButtonEnabled(true); //设置QLineEdit有清除按钮

	//垂直布局
	QVBoxLayout *pLayout = new QVBoxLayout;
	pLayout->addWidget(m_pNormalEdit, 1, Qt::AlignHCenter);
	pLayout->addWidget(m_pEchoEdit, 1, Qt::AlignHCenter);
	pLayout->addWidget(m_pReadOnlyEdit, 1, Qt::AlignHCenter);
	pLayout->addWidget(m_pDisabledEdit, 1, Qt::AlignHCenter);
	pLayout->addWidget(m_pClearEdit, 1, Qt::AlignHCenter);
	pLayout->setSpacing(10);
	pLayout->setContentsMargins(10, 10, 10, 10);

	this->setLayout(pLayout); //设置布局
	this->setMinimumSize(600, 500); //设定最小大小
}

参考

参考Qt助手,如有错误,请指正,谢谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QLineEditQt框架中的一个控件,用于接收用户的文本输入。占位字符是指在用户没有输入文本时,显示在QLineEdit中的一个灰色提示性文本。占位字符的颜色默认是浅灰色,可以根据需要进行自定义。 要修改占位字符的颜色,可以通过QPalette来实现。首先需要获取QLineEdit的palette对象,然后使用setColor()或setBrush()方法来设置占位字符的颜色。 示例代码如下: ```cpp // 获取QLineEdit的palette对象 QPalette palette = lineEdit->palette(); // 使用QPalette的setColor()方法设置占位字符的颜色 palette.setColor(QPalette::PlaceholderText, Qt::red); // 将修改后的palette对象设置回QLineEditlineEdit->setPalette(palette); ``` 上述代码将占位字符的颜色设置为红色。可以根据需要将Qt中支持的其他颜色设置给占位字符。 除了手动设置占位字符的颜色外,Qt还提供了一种更简单的方式来设置占位字符的颜色。可以使用QSSQt样式表)文件来自定义QLineEdit以及其他控件的样式。在QSS文件中,可以使用"::placeholder"伪元素来设置占位字符的样式,包括颜色。 示例代码如下: ```cpp // 创建QLineEdit对象 QLineEdit* lineEdit = new QLineEdit; // 设置QSS样式 lineEdit->setStyleSheet("QLineEdit::placeholder { color: red; }"); ``` 上述代码将占位字符的颜色设置为红色。可以根据需要将其他颜色值设置给占位字符。 总的来说,通过QPalette或QSS样式表,我们可以很方便地修改QLineEdit控件中占位字符的颜色。 ### 回答2: QLineEditQt框架中的一个用户界面组件,用于接收用户输入的单行文本。占位字符是一种特性,可在没有用户输入时显示的默认文本,用于提示用户输入内容的要求或示例。占位字符的颜色通常是浅灰色。 在Qt中,我们可以通过setPlaceholderText函数来设置QLineEdit的占位字符文本。例如: ```cpp QLineEdit *lineEdit = new QLineEdit(this); lineEdit->setPlaceholderText("请输入用户名"); ``` 当用户没有输入任何内容时,QLineEdit显示的将是"请输入用户名"这个占位字符文本。 至于占位字符的颜色,可以通过修改QLineEdit的样式表来实现。样式表是一种基于CSS的方式,用于美化用户界面组件。我们可以通过设置颜色属性来改变占位字符的颜色。例如: ```cpp QLineEdit *lineEdit = new QLineEdit(this); lineEdit->setPlaceholderText("请输入用户名"); lineEdit->setStyleSheet("QLineEdit::placeholder { color: grey; }"); ``` 通过上述样式表,占位字符将以灰色显示。 总结起来,QLineEdit的占位字符可以通过setPlaceholderText来设置,默认的颜色是浅灰色。如果需要改变颜色,可以使用样式表中的QLineEdit::placeholder属性来设置。 ### 回答3: QLineEdit的占位字符颜色是指在用户未输入内容时,QLineEdit文本框中显示的提示文字的颜色。在QLineEdit中,我们可以通过setPlaceholderText()函数来设置占位字符,而占位字符颜色的设置需要一些特殊的方法。 一种常见的设置占位字符颜色的方法是通过样式表(StyleSheet)来实现。我们可以通过setStyleSheet()函数来设置QLineEdit的样式表,使用QLineEdit::!placeholder样式选择器来选择占位字符,然后使用color属性来设置颜色。例如,下面的代码将占位字符的颜色设置为红色: ```cpp lineEdit->setPlaceholderText("请输入内容"); lineEdit->setStyleSheet("QLineEdit::!placeholder { color: red; }"); ``` 另一种设置占位字符颜色的方法是通过子类化QLineEdit来实现。我们可以创建一个继承自QLineEdit的子类,并重写该子类的paintEvent()函数,在函数中绘制占位字符,并设置颜色。例如,下面的代码将占位字符的颜色设置为绿色: ```cpp class MyLineEdit : public QLineEdit { public: MyLineEdit(QWidget* parent = nullptr) : QLineEdit(parent) {} protected: void paintEvent(QPaintEvent* event) override { QLineEdit::paintEvent(event); if (text().isEmpty() && !placeholderText().isEmpty()) { QStyleOptionFrameV2 option; initStyleOption(&option); option.palette.setColor(QPalette::Text, Qt::green); QPainter painter(this); style()->drawItemText(&painter, rect(), Qt::AlignLeft | Qt::AlignVCenter, option.palette, isEnabled(), placeholderText()); } } }; // 使用自定义的子类 MyLineEdit* lineEdit = new MyLineEdit(this); lineEdit->setPlaceholderText("请输入内容"); ``` 以上就是两种常见的设置QLineEdit占位字符颜色的方法。通过样式表可以方便快速地设置占位字符的颜色,而通过子类化可以更加自由地控制占位字符的绘制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值