Qt在线参考文档:http://www.kuqin.com/qtdocument/
1,延时等待函数(定时器单次触发) 2,得到按钮发送者的指针 3,根据月份和日期动态创建密码 4,执行树莓派的系统命令 5,打开文件操作 6,对话框提示 7,qDebug()输出格式的控制 8,得到QGraphicsScene中的所有图元,并且删除 9,关于文件路径的问题 10,加快程序的界面响应的方法 11,多按钮输入的问题(自制键盘) 12,Qt界面显示中文 13,树莓派音频口指令设置音量 14,gpio指令操作树莓派的IO口 15,设置窗口为顶层窗口 16,show函数的使用 17,全局宏的定义 18,提高树莓派的实时性
一:延时等待函数 方式一: 1,所需头文件 #include <QTimer>#include <QEventLoop> 2,源代码
QEventLoop eventLoop; //定义一个事件循环
QTimer::singleShot(500,&eventLoop,SLOT(quit())); //定时500ms,触发事件退出信号 eventLoop.exec(); //事件循环开始运行
方式二: QTime t; t.start(); while(t.elapsed()<1000) QCoreApplication::processEvents();
方式三:(此方法比方法一更好,推荐使用) QElapsedTimer t; t.start(); while(t.elapsed()<1000) QCoreApplication::processEvents();
注:此循环函数运行时,依然可以响应用户的事件
QTimer::singleShot( 100,this, SLOT(animateTimeout()) );
注:定时器的单次触发方式的使用
二:得到按钮发送者的指针
QPushButton *s=dynamic_cast(this->sender()); 或者T qobject_cast(QObject * object) 注意:所转换的类必须是的子类 例子: QObject *obj = new QTimer; // QTimer inherits QObject QTimer *timer = qobject_castQTimer *>(obj); 得到当前获得焦点的控件: QWidget *widget = focusWidget();
三:根据月份和日期动态创建密码
单行文本框设置密码模式:ui->passwordLineEdit->setEchoMode(QLineEdit::Normal);
dynamicCreatePassword() { QDate date=QDate::currentDate(); int i=0; QString temp; temp.clear(); qsrand(date.year()%100+date.month()); for(i=0;i<> { temp.append(QString::number(qrand()%10)); } //password1=temp;
temp.clear(); qsrand(date.year()%10+date.month()+date.day()+1); for(i=0;i<> { temp.append(QString::number(qrand()%10)); } mySystemPassword=temp; } 四:执行树莓派的系统命令 QString cmd="power off"; //树莓派自动关机 system(cmd.toLatin1().data()); //执行系统命令 五:打开文件操作 QFile file(path); //设置打开文件的路径 if(file.open(QFile::ReadWrite|QFile::Text)) //打开文件 { QTextStream inOrOut(&file); //关联读写操作 QString s=inOrOut.readLine(); //读出文件中某一行 } 六:对话框提示 方式一 QMessageBox::StandardButton box; box = QMessageBox::warning(this,tr("标题"),tr("内容"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); if(box==QMessageBox::Yes)
{ } else { return; }
方式二: QMessageBox box; int ret=0; box.addButton("确定",QMessageBox::AcceptRole); box.addButton("取消",QMessageBox::RejectRole); box.setText("是否停墨"); box.setWindowFlags(Qt::FramelessWindowHint); box.setStyleSheet("background-color: rgb(96, 160, 255);"); box.move(this->width()/4,this->height()/3); ret = box.exec(); 效果图:

七:树莓派输出格式 1,16进制的数据十进制输出 qDebug()<"read data=""> 八:得到QGraphicsScene中的所有图元,并且删除 if(scene->items().count()>0) { QList listScene = scene->items(); //得到QGraphicsScene上的所有图元 for(int i=0;i<> { scene->removeItem(listScene.at(i));//删除GraphicsScene的所有内容 } } 九:关于文件路径的问题 1,得到当前运行文件的目录(不含文件名):QCoreApplication::applicationDirPath(); //静态函数 qApp->applicationFilePath(); //得到当前运行程序的完整路径,含文件名; 2,从文件的完整路径名中剥离出文件的路径:QFileInfo p; p.absolutePath();//得到文件的绝对路径,不含文件名的路径 十:加快界面程序的响应 QApplication:: processEvents()函数告诉Qt处理任何没有被处理的事件,并且将控制权返回给调用者,该函数可以加快界面的响应速度,尤其是处理的数据量较大的耗时操作时,有很好的优势。 调用方法: qApp->processEvents(); 十一,多按钮输入值的编写(自制键盘) QPushButton *s=dynamic_cast(this->sender());//得到点击的按钮 QWidget *widget = focusWidget(); //得到获得焦点的控件的指针 QSpinBox *currentSpinBox=dynamic_cast(widget);//将获得焦点的控件转换成目标控件,之后就可以当做目标控件使用了,比如当前的currentSpinBox就可以当做QSpinBox来使用了。
十二,Qt中界面显示中文的方法 包含头文件:#include 在main.cpp中加入: QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
十三:设置树莓派的音频口的输出音量 设置方法:sudo amixer set PCM 100% //将音量调节到最大 参考:https://blog.csdn.net/j326214730/article/details/78390942
十四:用GPIO指令操作树莓派的管脚 1, gpio -g mode 26 out 设置管脚输出模式,-g参数表示是BCM编号方式,如果去掉这个参数以wiringPi编号方式,即为25。 2,gpio -g write 26 1 设置该管脚为高电平 3,gpio -g write 26 0 设置该管脚为第电平 4,gpio -g read 26 读取管脚的当前状态 更多命令参考:https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/
十五:设置窗口为顶层窗口 activateWindow(); //该函数可以设置某个窗口为顶层窗口 //无任务栏图标,无工具栏,置顶显示 setWindowFlags( Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint)
十六:当调用show显示界面时,希望在界面显示出来之前做些其他的事 方法一:重写类的show函数; 方法二:重写shoeEvent函数
十七:Qt中全局宏的定义 1,全局宏变量 在.pro文件中添加DEFINED +=name value; 例如:DEFINED +=VRESION "20180730"; //定义VERSION的全局变量为"20180730"
2,定义方法,例如:将VERSION定义成"20180730" DEFINES += VERSION=\\\"20180730\\\"
十八:提高树莓派的实时性 1,禁用某个核的调度: 在/boo/cmdline的末尾添加:isolcpus=3(树莓派有四个核,不予许第四个核进行调度) 2,使某个程序单独占用一个核: (单独占用第四个核) cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(3,&mask); if (sched_setaffinity(3,sizeof(mask),&mask)==-1) qDebug()<"affinity set=""> 参考资料:https://www.cnblogs.com/yafengabc/p/6292265.html

码字不易,点个赞,关注下再走呗。本公众号至少保持月更! ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:树莓派应用,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|