QT creator 编程中常见问题记录
虽然都是一些细枝末节的东西,但是如果不记录下来,时间久了容易忘记,再次遇到时还是会耽误自己的时间,
因此记录于此,方便查阅,同时遇到新的问题也会更新进来。
<0>安装问题
qtCreaotr如果是自己下载二进制安装包,最好以普通用户安装到自己的目录下
,否则权限问题,环境变量问题很让人头痛
另外 有时安装某些QT对应发行版的软件管理器会自动帮你安装一个QMAKE
这时如果与QTcreator的QMAKE不对应,会出现很隐蔽的错误
所以要保持系统只有一套QMAKE
<1>出现#include <GL/gl.h>:GL/gl.h:No such file.
一定是freeglut3-dev缺失
找到自己发行版对应的软件包管理工具把它装好就OK
<2>LineEdit等Qwidget改变字体颜色
QPalette p = palette();
p.setColor(QPalette::Text, QColor(0, 255, 0));
lineedit.setPalette(p);
<3>setFocus可让对应控件获得焦点
<4>QT判断文件/文件夹是否存在
QFileInfo::exists() or QFile::exists().
文件可以静态方法调用
QDir dir("./dir");
std::cout<<dir.exists()<<std::endl;
文件夹必须先声明对象
<5>QT创建配置文件
用QSettings写ini文件:
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);
ConfigIni->setValue("/config/node1",ui->lineEdit->text());
delete ConfigIni;
用QSettings读ini文件:
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);
ui->lineEdit_2->setText(ConfigIni->value("/config/node1","20").toString());
delete ConfigIni;
<6>字符串分割
QString str = "one, two, three, four";
cout << str.section(',', 1, 1).trimmed().toStdString() << endl;
return 0;
结果是 "two",前后不包含空格。trimmed() 去掉字符串前后的ASCII字符 '\t', '\n', '\v', '\f', '\r'
<7>LineEdit输入检查
Qt提供了三个内置验证器类: QDoubleValidator, QIntValidator, QRegExpValidator
正则表达式检查,高手会用的很爽,我目前只能简单地应用下
QRegExp regExp2("[0-9]{1,2}[.][0-9]{0,2}");
QRegExpValidator *pRegExpValidator2 = new QRegExpValidator(regExp2,this);
ui->lineEdit_2->setValidator(pRegExpValidator2);
整数范围
QIntValidator *motor_speed_Validator= new QIntValidator(0,12000,this);
ui->Edit_motor_speed->setValidator(motor_speed_Validator);
同样还有QDoubleValidator
QDoubleValidator *validator=new QDoubleValidator(0,99,2,this);
validator->setNotation(QDoubleValidator::StandardNotation);
uii->lineEdit->setValidator(validator);
0是下界,99是上界,2是小数位数
<8>QString和Int的互换
long a = 63;
QString s = QString::number(a, 10); // s == "63"
QString t = QString::number(a, 16).toUpper(); // t == "3F"
double,float,int 对于QString 有相应的toDouble,toFloat,toInt函数调用
Qstring str="FF";
bool ok;
int dec=str.toInt(&ok,10); //dec=255 ; ok=rue
int hex =str.toInt(&ok,16); //hex=255;ok=true;
<9>中文输入的问题
想省事直接安装IBUS IBUS-QT IBUS-PINYIN
喜欢Fcitx
ubuntu下:sudo apt-get install libfcitx-qt5-0
suse下:software.opensuse.org里搜索 fcitx-qt5安装相应的包即可