找回密码
 立即注册
Qt开源社区 门户 查看内容

Qt和树莓派中重复率高的代码

2019-9-20 13:22| 发布者: admin| 查看: 699| 评论: 0

摘要: Qt在线参考文档:http://www.kuqin.com/qtdocument/1,延时等待函数(定时器单次触发)2,得到按钮发送者的指针3,根据月份和日期动态创建密码4,执行树莓派的系统命令5,打开文件操作6,对话框提示7,qDebug()输出 ...

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。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了