Qt常用操作

QLineEdit设置密码不可见

使用枚举(qt库所有):

	enum EchoMode {
    
     Normal, NoEcho, Password, PasswordEchoOnEdit };

使用代码如下:

    ui->keyNewLineEdit->setEchoMode(QLineEdit::Password);
    ui->keyOldLineEdit->setEchoMode(QLineEdit::Password);

QLineEdit添加提示语

在QLineEdit无输入的时候,框内显示淡化的提示内容,如下图所示:
在这里插入图片描述
实现代码:

    ui->lineEdit_cmd->setPlaceholderText("输入命令");
    ui->lineEdit_pwd->setPlaceholderText("输入密码");

QLineEdit输入补全

实现效果如下图:
在这里插入图片描述
实现代码:

	QStringList buff;
    buff << "11" << "111" << "1111" << "222" << "333"<<"this is a test"<<"";
    QCompleter *com = new QCompleter(buff,this);
    com->setCaseSensitivity(Qt::CaseSensitive);
    ui->lineEdit->setCompleter(com);

补全系统文件路劲代码:

	QCompleter *completer = new QCompleter(this);
	QDirModel *dirModel = new QDirModel();
	completer->setModel(dirModel);
	ui->lineEdit->setCompleter(completer);

效果:
在这里插入图片描述

设置数据大小端

使用枚举(qt库所有):

    enum ByteOrder {
    
    
        BigEndian = QSysInfo::BigEndian,
        LittleEndian = QSysInfo::LittleEndian
    };

在上下位机通讯中经常使用到该操作,代码如下:

    QByteArray arrayItemInfo;
    QDataStream out(&arrayItemInfo, QIODevice::ReadWrite);
    out.setByteOrder(QDataStream::LittleEndian);  //设置小端格式

qDebug输出函数、文件等相关信息

可使用标准C++中的宏定义__FUNCTION__、FILE__和__LINE,程序预编译时,预编译器将用所在的函数名,文件名和行号替换。qt中可使用Q_FUNC_INFO宏输出“类名::函数名”
代码如下:

    qDebug() << __FUNCTION__ << __LINE__;
	qDebug()<<"In language switching... for:"<<Q_FUNC_INFO;

非事件阻塞延时

使用这种延时方式可实时响应qt事件,而不会造成事件阻塞。

void Delay(int msec)
{
    
    
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

加快qtCreator编译速度

添加Make 参数 -j 4 ,使用多线程编译,如下图所示:
在这里插入图片描述

隐藏QTabwidget的tab

ui->tabWidget->findChildren<QTabBar*>().at(0)->hide();

如果qt版本是5.0以上,还可以使用如下操作:

ui->tabWidget->tabBar()->hide();

md5加密计算

QString passwordBuff = "123456";
passwordBuff = QCryptographicHash::hash(passwordBuff.toAscii(),QCryptographicHash::Md5 ).toHex();
return passwordBuff.compare("123456");

按钮选中时去掉虚线边框

按钮样式中添加qss语句:

 outline: none;

或者直接在ui设计界面的属性里面,将聚焦属性设为无聚焦,这样也可以更好达到目的,如果是使用ui添加的控件,建议使用该方法。
在这里插入图片描述

label内容自动换行

勾选wordwrap属性可实现自动换行,如下图:
在这里插入图片描述

设置qlabel控件内容可被选择复制

    ui->label_checkCode->setTextInteractionFlags(Qt::TextSelectableByMouse);

tr()函数正确使用方法

非常不建议tr中包含中文,尽管现在的新版Qt支持中文到其他语言的翻译,但是很不规范,tr的本意是包含英文,然后翻译到其他语言比如中文。如果没有翻译的需求,最好禁用tr,tr需要开销的,Qt默认会认为他需要翻译,会额外进行特殊处理。

split、join字符串分割与重组

QString str;
QStringList strList;
strList = str.split(",");
str = strList.join(",");

设置QLineEdit为可清空

这个接口好像只有qt5才有,qt4不存在。

ui->mLineEdit->setClearButtonEnabled(true);

效果如下图,输入框中右边的清空控件:
在这里插入图片描述

设置主界面背景颜色

    QPalette palette(this->palette());
    palette.setColor(QPalette::Background, QColor(220,220,220));
    this->setPalette(palette);

禁止qDebug输出

在项目的pro文件中添加定义如下:

DEFINES+= QT_NO_DEBUG_OUTPUT

设置QCombox下拉框可编辑

    ui->comboBox->setEditable(true);

搜索QByteArray中的内容

比如,搜索数据中连续为0x69、0xaa的数据。

int index = _cache.indexOf("\x69\xaa");		//_cache为QByteArray类型

qt非阻塞延时操作

void MyClass::sleep(int msec)
{
    
    
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
    	QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

qt子控件聚焦切换

qt子控件的切换默认使用tab键,但是特使情况下可其他操作切换,如调用下面函数:

	focusNextChild();

此函数一般配合事件过滤器使用,如下,按空格键实现聚焦切换:

textEdit->installEventFilter(this);		//为textEdit安装事件过滤器

void MyLineEdit::keyPressEvent(QKeyEvent *event) 
{
    
     
     if (event->key() == Qt::Key_Space)
     {
    
     
         focusNextChild(); 
     }
}

使用QUuid生成唯一标识

UUID 为通用唯一标识,是由某种算法生成的 16 字节(128 位)数字,旨在保证 UUID 在使用它的分布式计算环境中是唯一的。
警告: 此功能仅适用于 Windows 平台(qt官方原话)。
非windows平台UUID由qrand()种子生成,所以产生的UUID不保证具有唯一性。

#include <QUuid>

QString id = QUuid::createUuid().toString();
id = QUuid::createUuid().toString().remove('-').remove('{').remove('}');	//唯有数字字母的ID

Guess you like

Origin blog.csdn.net/weixin_42887343/article/details/109814287