1.当单元格为空时(而非是被赋值为“”),其item调用text()会报错,因为此时的item()为空指针。
2.ui->tableWidget->setCurrentItem(ui->tableWidget->item(1,1))表示将(1,1)位置处的单元格作为当前所选的,能够成功的前提是item(1,1)不是null.
3.Qt正则表达式防止转义,需要在原来基础上再加一个\.比如"\d"在正则表达式中是真实存在的,在C++字符串中就需要加上"\",保证系统处理后仍保留"\d".
4.如果采用了ui界面文件,自己又在代码里自定义了m_treeWidget对象(非ui下的对象),如果不去setCentralWidget(m_treeWidget),显示出来的树控件的左上角会和窗口的左上角重合,不符合设计准则;而set之后则树控件会成为中心窗口.
5.注意Qt中exist()的使用:当为文件类型时,采用QFile;当为文件夹类型时,采用QDir,否则会出问题的.参考文章:Qt 判断文件、文件夹是否存在的方法_非常道的博客-CSDN博客_qt 判断文件是否存在
6.Qt中的QWidget的close()是槽函数,不是信号. connect中的槽函数必须要用slots声明.
7.貌似很复杂的报错,其实错误很简单.target is not pointer or reference to complete type. invalid use of incomplete type... forward declaration of..
说的都是同一个事情,QToolButton类不完整,前向声明了,原因是没有包含该类的头文件.
8.qt中setItem(row, col, new QTableWidgetItem("new"));不要忘记前面的new.
9.qt中的如果想要循环利用变量填充字符串的话,记得一定要把"%1"那句放在循环里,如果放在循环前面,"%1"填充一次后,接下来就不再起到填充字符串的作用了.
for(QString str: strList)
{
QString strSql = "select * from Table where name = %1";
QString strNew = strSq.arg(str);
}
10.qt的for(item: QMap的字典对象),item竟然是值,这和python的不一样,python中是键.qt中获取键的方法:遍历QMap::keys()
11.qt Creator中没有对选中部分进行替换的方法,全部替换就是真的全部替换了.
12.影子编译指的是编译目录和源码目录不一样.通过影子编译,可以同时进行多个不同配置选项的编译,且互不影响(就像影子之间没有影响)
13.Qt中如果报exe被截断,如果直接编译解决不了,就去删掉这个exe
14.Qt使用signal和slot忘记使用Q_OBJECT
15.当感觉和demo一致,现象不一致时,要一点一点对比过去,有可能存在不一致的地方.比如重写ListWidget的keyPressEvent时,忘记了调用父类的函数了.
16正则表达式和Qt中的正则表达式: \bst\w*\b \\bst\\w*\\b //匹配以st开头的字符串
17.Qt打印char *的地址: qDebug() << &pStr;
18.QT QTableWidget::item() returns nullptr even when widget assigned to it:原因是widget没有分配行和列.
19.CONFIG(debug, debug|release){
这里的{要在上一行,如果换行的话,就起不到效果
20. Qt linux下生成so的项目中, 编译时不需要指定依赖的别的so.但在生成exe的项目中,编译必须指定全部的so.
21. QDialog中捕捉窗口关闭需要使用closeEvent(QCloseEvent *e).之前尝试重写QWidget的close()函数,没有成功.
22.QString中不可以使用单引号来表示字符串,如果字符串中有双引号,请用\"来做.
23.使用自定义类的QList,需要定义该类的赋值操作符.比如CustomClass &operator=(const CustomClass& mp)
使用自定义类的QSet,需要定义该类的==和qHash()