palette(); palette.setBrush(QPalette::Background_qt功能">
赞
踩
就介绍无ui界面时的调用方法。
setPalette(QColor("pink"));
QPalette palette = this->palette();
palette.setBrush(QPalette::Background,QBrush(QPixmap("/Users/yucheng/allpic/back.png")));
setPalette(palette);
setFixedSize(400,300);
showFullScreen();
setWindowFlag(Qt::FramelessWindowHint);
setWindowOpacity(0.5);
setWindowOpacity(0.5);
button->setCursor(Qt::BusyCursor);
光标类型 | 解释 |
---|---|
ArrowCursor | 箭头,默认 |
IBeamCursor | 输入光标 |
PointingHandCursor | 点击手势 |
以上是常用光标 | ~~~~~~~~~~~~ |
UpArrowCursor | 上箭头 |
CrossCursor | 十字准心 |
WaitCursor | 等待符号 |
SizeVerCursor | 上下扩或/缩小窗口 |
SizeHorCursor | 左右扩展或缩小窗口 |
SizeBDiagCursor | / 方向扩展或缩小窗口 |
SizeFDiagCursor | \ 方向扩展或缩小窗口 |
SizeAllCursor | 所有方向扩展或缩小窗口 |
BlankCursor | 隐藏光标 |
SplitVCursor | 上下方向移动内部窗口 |
SplitHCursor | 左右方向移动内部窗口 |
ForbiddenCursor | 禁止点击手势 |
WhatsThisCursor | 疑问光标 |
BusyCursor | 忙碌光标 |
OpenHandCursor | 张开手势 |
ClosedHandCursor | 握紧手势 |
DragCopyCursor | 拖动复制光标 |
DragMoveCursor | 拖动移动光标 |
DragLinkCursor | 拖动连接光标 |
BitmapCursor = 24 | |
CustomCursor = 25 |
QString filename = QFileDialog::getOpenFileName(this,"Open File", "","", 0);
源码:
QString getOpenFileName (
QWidget * parent = 0,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = 0,
Options options = 0 );
默认打开位置(主页)和文件过滤(txt, pdf)
(这里我用了pyside的方法)
fileDialog = QtWidgets.QFileDialog()
path = fileDialog.getOpenFileName(dir='/Users/yucheng', filter='(*.txt *.pdf)')
label->adjustSize();
参考博客:https://blog.csdn.net/qq_35040828/article/details/53587157
这是网上的一个方法,我试过,但是不知道为什么不能用,先放着。
line = new QLineEdit(this);
QIntValidator Int(10,99,this); //只能输入10-99的整数
line->setValidator(&Int);
这是正则表达式的用法:
先上代码:
QRegExp reg("^(-?\\d+)(\\.\\d+)?$");
QRegExpValidator * regV = new QRegExpValidator(reg,this);
line->setValidator(regV);
^
是起始部分;
-?
是“-”可有可无;
\d
是数字,相当于[0-9]
;
+
是后面有大于等于1个\d
,\d+
是一个整体;
\.
是小数点;
(···)?
是(···)部分可有可无;
$
是末端部分;
但是在Qt中使用正则用的是字符串形式,所以对转义字符,我们需要内部将“\”转义,所以就出现了程序中的\\d
,\\.
形式。
这段的意思是只有(起始输入“-”或者不输入,后面加上若干数字,最后可以加上带有“.”及后面的数字)有效输入,也就是所有数字集合。
对于正则表达式的使用,可以自行了解。本文不予过多解释。
常用正则表达式 | 输入说明 |
---|---|
“^(-?\d+)(\.\d+)?$” | double |
“^(\d+)(\.\d+)?$” | unsigned double |
“^-?\d+$” | int |
“^\d+$” | unsigned int |
“^([a-z]|[A-Z])+$” | 英文输入,大小写随意 |
“^[A-Z]+$” | 英文只能大写 |
“^[a-z]+$” | 英文只能小写 |
“^[A-Z]([A-Z]|[a-z])+$” | 第一个英文必须是大写 |
//这里我用的pyside2,思路是一样的
pl = QtGui.QPalette()
brush = QtGui.QBrush()
brush.setColor(self.color)
pl.setBrush(QtGui.QPalette.Base, brush)
self.textEdit.setPalette(pl)
line->setEchoMode(QLineEdit::Normal);
代码 | 解释 |
---|---|
Normal | 默认,无特殊 |
NoEcho | 不显示输入 |
Password | 输入密码 |
PasswordEchoOnEdit | 输入时显示,结束输入时转换成密码 |
line->setAlignment(Qt::AlignRight);
代码 | 解释 |
---|---|
AlignTop | 顶部 |
AlignBottom | 底部 |
AlignLeft / AlignLeading | 左边居中,默认 |
AlignRight / AlignTrailing | 右边居中 |
AlignHCenter | 水平方向居中 |
AlignJustify | (和AlignLeft效果相同) |
AlignAbsolute | 同上 |
AlignVCenter | 竖直方向居中 |
AlignBaseline | 左边居中 |
AlignHorizontal_Mask | AlignLeft / AlignRight / AlignHCenter / AlignJustify / AlignAbsolute |
AlignVertical_Mask | AlignTop / AlignBottom / AlignVCenter / AlignBaseline |
AlignCenter | AlignVCenter / AlignHCenter |
line->setReadOnly(true);
QAction *act = new QAction;
act->setIcon(QIcon("/Users/yucheng/allpic/quit.png"));
line->addAction(act,QLineEdit::TrailingPosition);
//尾端嵌入
//line->addAction(act,QLineEdit::LeadingPosition);
//首端嵌入
当有文本输入时自动消失。
line->setPlaceholderText("there is a lucky dog");
如输入一些关键字,下拉框自动显示要补全的内容。
这块设计到另外两个类,一个是QCompleter
,此类常用于下拉框的显示。
一个是QStandardItemModel
,这是制作和表格相关的类。
一共分三步:
1、定义原型
model = new QStandardItemModel(0,1,this); //建立一个0行1列的表格模型
QCompleter * com = new QCompleter(model,this); //将下拉框建立在表格基础上
line->setCompleter(com); //申明下拉框
2、设置下拉框属性
//构造函数 { connect(line,&QLineEdit::textChanged,this,&Widget::LineChanged); //当前文本改变时调用槽函数 } //槽函数 void Widget::LineChanged() { QStringList list; list << "@@@" << "!!!" << "###" << "$$$" << "%%%" << "^^^"; //定义一个list model->removeRows(0,model->rowCount()); //将model内全部删除,否则会一直添加。不可用clear函数! for(int i = 0 ; i < list.size(); i++) //循环n次 { model->insertRow(0); //在第0行插入 model->setData(model->index(0,0),line->text()+list.at(i)); //设置第0行数据 } }
此时输入时效果:
当然砸实际操作中会有一些问题,比如说选中之后会再次弹出,因为触发了textChanged信号;此时你需要判断是否已经输入预期值,并且不在提示。
最简单的方法是判断是否已有list中内容。
QStringList list;
list << "@@@" << "!!!" << "###" << "$$$" << "%%%" << "^^^";
for(int i = 0 ; i < list.size(); i++)
if(line->text().contains(list.at(i)))
return;
from PySide2 import QtWidgets, QtGui, QtCore import sys class LoadUI: def __init__(self, path, message='', w=240, h=200): _desk = QtWidgets.QDesktopWidget() self.W, self.H, self.w, self.h = _desk.width(), _desk.height(), w, h self.x = (self.W-self.w)/2 self.y = (self.H-self.h-100)/2 self.widget = QtWidgets.QWidget() self.widget.setGeometry(self.x, self.y, self.w, self.h+50) self.widget.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.widget.show() self.label = QtWidgets.QLabel(self.widget) self.label.setGeometry(0,0,self.w,self.h) self.movie = QtGui.QMovie(path) self.label.setMovie(self.movie) self.label.show() self.movie.setSpeed(100) self.movie.start() self.movie.stateChanged.connect(self._restart) # 默认动画只播放一遍,采用信号机制重复播放 self.label = QtWidgets.QLabel(self.widget) self.label.setText(message) self.label.setGeometry(10,self.h-30,self.w,30) self.label.show() def finish(self): self.widget.close() def _restart(self): self.movie.start() if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) mainw = LoadUI('./src/gif/load.gif', '加载中,请稍等...') # for i in range(5): # print(mainw.movie.loopCount()) # time.sleep(1) sys.exit(app.exec_())
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果还有一些常用的方法没有涉及的,欢迎评论补充!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。