Qt中实用功能小合集

就介绍无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.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])+$”第一个英文必须是大写

·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_MaskAlignLeft / AlignRight / AlignHCenter / AlignJustify / AlignAbsolute
AlignVertical_MaskAlignTop / AlignBottom / AlignVCenter / AlignBaseline
AlignCenterAlignVCenter / 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_())

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果还有一些常用的方法没有涉及的,欢迎评论补充!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值