Qt的使用记录

发布时间:2026/5/20 2:11:35

Qt的使用记录 目录1、添加Qt程序图标2、转义字符3、findChild函数4、QSetting函数5、设置和取消正则表达式6、获取剪贴板的内容7、mouseMoveEvent不响应8、QByteArray转QString需要注意的一个问题9、获取信号的发送者10、串口接收不完全(QSerialport)11、QTableWidget12、background-image和border-image的区别13、new之后需不需要delete14、使用ISP升级单片机注意点15、QTabWidget16、QToolButton17、修改UI文件无效18、QString去除空格19、setstylesheet子控件被父窗体的样式影响20、调用自定义键盘的方法21、QSS添加自定义属性22、设置背景图片的三种办法23、Qt::WindowFlags枚举类型24、保存图片25、QDialog的exec弹框消失后,程序一闪而过之前的信息26、运行tslib下的bin文件出现selected device is not a touchscreen I understand27、使用指定字体28、QTableWidget的item使用QRegExp正则表达式29、QTreeWidget30、压缩和解压缩(qCompress)31、设置应用程序开机自启动与删除32、应用程序重启33、导出文件编码格式(UTF8和GBK的区别,.cvs和.txt文件乱码)34、提示xxx.exc 已停止工作35、数据库常用操作36、窗口标题栏的操作37、语言家换行38、目录下的文件排序39、QMessageBox 不阻塞40、Qt运行程序自己显示不完全41、QObject::killTimer: timers cannot be stopped from another thread42、Qt的针对Button的文本显示不完全则换行或者省略43、installEventFilter使用后控件显示异常1、添加Qt程序图标RC_ICONS=xx.ico 或者使用 setWindowIcon("xxx.icon");2、转义字符单引号:需要实现效果 hello 'Qt' 在程序中你需要的操作是hello \'Qt\' 但是我出现过需要为\也要添加转义符的情况,操作为:hello \\\'Qt\\\' 双引号: 需要实现效果 hello "Qt" 在程序中你需要的操作是hello \"Qt\" 但是我出现过需要为\也要添加转义符的情况,操作为:hello \\\"Qt\\\"3、findChild函数QLineEdit* lE=findChildQLineEdit*("lE_Temp"+QString::number(i)); QLineEdit* lE=findChildQLineEdit*(); 返回对象中类型可以转换为T,并且名为name的孩子。如果不满足条件,则返回0。 默认执行递归搜索,除非指定选FindDirectChildrenOnly。 如果有一个以上的孩子匹配搜索,返回最直接的祖先。 如果有几个直系祖先,没有定义哪一个将被返回。 这种情况下,应该使用findChildren()。说简单点,就是一个找爸爸的函数4、QSetting函数//设置配置文件的目录和位置,如果有,则不动,没有,会自动创建 //构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省 Qsetting = new QSettings("F:/config.ini",QSettings::IniFormat); if(setting-contains(tr("set/time%1").arg(i+1))){ //将读取到的ini文件保存在QString中,先取值,然后通过toString()函数转换成QString类型 qDebug() setting-value(tr("set/time%1").arg(i+1)).toString(); } else{ setting-beginGroup(tr("set/")); //开始节点,向ini文件的写入内容 //ini文件中写入内容,setValue函数的两个参数是键值对,time节下的第一个参数 setting-setValue(tr("time%1").arg(i+1),"00:00:30"); setting-endGroup(); //结束节点 qDebug() setting-value(tr("set/time%1").arg(i+1)).toString(); }5、设置和取消正则表达式QRegExp reg("^-?(\\d{0,0}\\d(\\.\\d{1,2})?)$"); 设置正则表达式:ui-lineEdit-setValidator(new QRegExpValidator(reg)); 取消正则表达式:ui-lineEdit-setValidator(0);6、获取剪贴板的内容/* 获取系统剪贴板指针 */ QClipboard *clipboard = QApplication::clipboard(); /* 获取剪贴板上文本信息 */ QString text = clipboard-text();7、mouseMoveEvent不响应1. 如果是普通的QWidget,需要在构造函数添加如下内容:setMouseTracking(true); 2. 如果是 MainWindow ,则需要在构造函数添加如下内容: setMouseTracking(true); ui-centralWidget-setMouseTracking(true);8、QByteArray转QString需要注意的一个问题QByteArray can be used to store both raw bytes (including '\0's) and traditional 8-bit '\0'-terminated strings. QByteArray 是可以包含‘\0'的,比如: QByteArray ba; ba += '1';ba += '2';ba += '\0';ba += '3';ba += '4'; QString str(ba); str的内容是"12",而"\034"被抛弃了9、获取信号的发送者void QCalculatorUI::slot_click1() { QPushButton* b = (QPushButton*)sender(); // 获取到了发送该信号按钮的指针 qDebug() b-objectName(); }10、串口接收不完全(QSerialport)以前在自己学习Qt串口的时候,接收不完全的时候只是做了一个最粗糙的拼接,比如:headdatacrctail,数据接收不完全一般都是找不到有头没尾,所以我当时的处理是出现有头没尾的时候,我就再次读取将两组数据拼接在一起,如果还是错误的,我就直接将两组数据都丢弃了,从头来,这样会丢弃很多组数据,因为: 可能第一条headdata 第二条是第一条的crctail和第二条的head data,这样下去丢失数据比较严重, 所以后来在工作中,保证数据不丢失是一个重要的问题,所以我就弄成一个队列的信息,设置一个定时器,500ms读取一次串口的所有内容 myBa.append(port-readAll()); 之后将这些数据开始分析 一条一条信息的来,先找第一个头、尾的位置,再确定第二个头的位置 没找到头但是有信息,报告错误,同时清空 有头无尾,则等待,调用port-readAll();重新确定位置, 有尾无头,直接去除到此尾部的信息 有两个头,中间无尾巴,去除前面一个头 然后将正确信息发送到数据处理函数里,并去除此条信息,再处理队列里的其他数据11、QTableWidget1、设置Qtablewidget第一列不可编辑方法: 1.1、QTableWidgetItem 的 setFlags() 和 flags() 1.2、QTableWidget 不能 设置 setEditTriggers() 为 QAbstractItemView::NoEditTriggers,否则1中的设置会失效 2、设置行列个数 ui-tableWidget-setColumnCount(5); ui-tableWidget-setRowCount(5); 3、设置标题 ui-tableWidget-setHorizontalHeaderLabels(QStringList() "one" "two"); 4、控制水平标题头隐藏 ui-tableWidget-verticalHeader()-setVisible(false); 5、只允许单个选中 ui-tableWidget-setSelectionBehavior(QAbstractItemView::SelectItems); 6、编辑点击触发,与关联的信号对应最佳 ui-tableWidget-setEditTriggers(QAbstractItemView::DoubleClicked);12、background-image和border-image的区别QLabel *mylabel = new QLabel; //不会自动适应图片,background-image像电脑桌面的平铺,图片尺寸不变 mylabel-setStyleSheet(QString("background-image:url(:/image/test.jpg)")); //自动适应图片,border-image像桌面的拉伸效果,常用 mylabel-setStyleSheet(QString("border-image:url(:/image/test.jpg);"));13、new之后需不需要deleteQObjects在一个对象树中组织他们自己。当创建一个QObject时,如果使用了其他对象作为其父对象,那么,它就会被添加到父对象的children()列表中。这样一来,当父对象被销毁时,这个QObject也会被销毁。事实表明,这个机制非常适合于管理GUI对象。例如:一个QShortcut(键盘快捷键)对象是相关窗口的一个子对象,所以,当用户关闭了这个窗口时,快捷键也会被销毁。 QT的父子对象机制是在 QWidget和QOject中实现的。当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。 这种父子对象机制会在很大程度上简化我们的内存管理工作,减少内存泄露的风险。我们需要显试删除(就是用DELETE删除)的对象是那些使用NEW创建的并且没有父对象的对象(切记是new的才要delete,通过成员函数获得的对象,没有特殊说明的,千万不要随便delete.)。如果我们在删除一个对象的父对象之前删除它,QT会自动地从它的父对象的子对象列表中移除它的 具体例子如下: int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; QLabel *label =new QLabel("hello",w); //这里使用new之后不需要执行delete,因为label的父类是w,而w是在栈中创建,在程序关闭的时候会自动释放,所以作为w的子类内存也被释放。 QLabel *label1 =new QLabel("world"); //这个是需要执行delete label1,否则会造成内存泄漏,因为label没有父类,所以不会为label释放内存 w.show(); a.exec(); delete label1; label1=NULL; return 0; }14、使用ISP升级单片机注意点环境LPC2468 Qt程序步骤是 (元素之间要有一个空格,"OK"、"0"成功,其他失败) 1. 发送"?",会回复"Synchronized",注意大小写 2. 发送"Synchronized",会回复"OK",(自动波特率配置完成) 3. 发送系统时钟频率,会回复"OK" 4. 发送“U 23130”,会回复"0",解锁Flash写/擦除运行命令 5. 发送“P 起始扇区号 结束扇区号”,会回复“0”;(准备操作扇区) 6. 发送“E 起始扇区号 结束扇区号”,会回复“0”。(擦除成功) 7. 发送"W 1073742336 4"向地址,0x4000 0200写入4个字节数据,如果你的字节够大剩下的就是循环烧入了 以上顺序固定不可打乱,以及在qt程序发送时,每个命令后面一定要加上\r\n的十六进制,\r 0x0D ,\n 0x0A,因为在人模拟的时候,每输入一个命令是通过回车键来发送的,命令自带\r\n 这其实只是连接命令,后面升级还要不要的发P,W,C命令,但是我就不写了,都是千篇一律的东西 注:开机后不要发送命令,如果芯片回复错误后,你就需要重启 Qt读取文件大小的时候打开的方式选择只读就可以,不要以文本形式打开,因为你的升级文件是bin文件,以文本打开的话,内容大小都会改变15、QTabWidget1、ui-tabWidget-setTabsClosable(true); // 生成关闭按钮 2、QString("QTabBar::tab{width: %1px;height:46px;font:20px;color:black}").arg(w);//显示设置宽度和高度,和字体大小,字体颜色 3、QString("QTabWidget::pane{border-width: 0px;border-color:white;border-style:outset;background-color: rgb(132, 171, 208);border-radius: 3px;}")//设置整体组件,pane 指整个tab组件 ,border-width 组件的外框宽度, border-color 外框颜色, border-style外框风格,比如outset就是凸出立体感,border-radius 外框的圆角像素。而本示例是无外框,无背景图的。 4、QString("QTabWidget::tab-bar{left:20px;}");//标题栏左右移动 5、QString("QTabBar::tab:selected{margin-left: 1;margin-right: 0;color: black;background-color:rbg(100,200,255);} ");//点击tab此时的状态,margin-left距离左边的tab边缘的距离,margin-right距离右边的tab边缘的距离,color是字体颜色,background-color背景色 6、QString("QTabBar::tab:!selected{margin-left: 1;margin-right: 0;color: white;background-color:rbg(50,100,255);} ");//当有点击的时候,还要改变未点击的按钮效果 7、QString("QTabBar::tab:hover:!selected{color: white;margin-left: 1;margin-right: 0;background-color:rbg(100,200,100);} ");//突出移动到tab时候的效果 8、QString("QTabBar::tab:!selected{margin-top: 10px;margin-bottom: -10px;} ");//在将突出显示点击按钮的大小16、QToolButton1、QString("QToolButton{font-size:15px;max-width:180px;max-heiget:180px;min-width:180px;min-heiget:180px;background:#4c7e97;}");//设置固定大小、字体大小和背景色 2、QString("QToolButton{border-image:url(:/qt.png)}");//设置背景图 3、QString("QToolButton::pressed{border-image:url(:/pressedQt.png)}");//设置点击效果 4、QString("QToolButton::hover{border-image:url(:/hoverQt.png)}");//设置悬浮效果 5、QString("QToolButton{border-radius:12px}");//设置圆角 6、QString("QToolButton{background:transparent;}");//设置背景透明17、修改UI文件无效1、.pro文件中添加代码: UI_DIR=ui_path//指定UI文件所在目录为当前使用的程序目录,并每次编译更新UI文件 2、清除再重新构建

相关新闻