目录
就介绍无ui界面时的调用方法。
一、主界面___this
·背景颜色
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);
二、按钮___QPushButton
·鼠标接触组件的光标变化
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 |
·文件选择框ui
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)')
三、标签QLabel
·设置自动大小
label->adjustSize();
四、文本输入框___QLineEdit、QTextEdit
·只允许输入数字或字符
参考博客:https://blog.youkuaiyun.com/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])+$” | 第一个英文必须是大写 |
·QTextEdit设置透明
//这里我用的pyside2,思路是一样的
pl = QtGui.QPalette()
brush = QtGui.QBrush()
brush.setColor(self.color)
pl.setBrush(QtGui.QPalette.Base, brush)
self.textEdit.setPalette(pl)
·QLineEdit不同形式输入,密码、隐藏···
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;
五、动态加载页面(pyside)
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_())
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果还有一些常用的方法没有涉及的,欢迎评论补充!
3025

被折叠的 条评论
为什么被折叠?



