1、在 QtCreator 中错误使用未声明的标识符“主窗口”语义问题(error use of undeclared identifier ‘mainwindow’)
解决:在help-about plugins中取消勾选ClangCodeModel
2、可以继承ui.h文件,在cpp文件中不用写ui->控件
3、tar -invalid options-
复制导致的问题重新手打一遍即可
4、信号槽
Qt中提供了信号和槽机制用于完成界面操作的响应,信号和槽是完成任意两个Qt对象之间通信的机制。
最常用的连接方式:(qt4写法)
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
qt5写法:
connect(taxFileButton, &QPushButton::clicked,signalMapper, &QSignalMapper::map)
信号槽绑定时,需要先声明槽函数,然后实现槽函数,最后使用 connect() 绑定起来,而且在 connect() 的时候如果槽函数写错了编译时不会报错,只有在 Debug 模式下运行时才会提示槽函数不存在,Release 模式下运行时不会给予任何错误提示。
Qt 5 使用 C++11 支持 Lambda 表达式,connect() 的时候如果函数名写错了就会在编译时报错,还有一点是 Lambda 表达式在需要的时候才定义,不需要声明,写起来比较简单。
Lambda 表达式可以理解为匿名函数,比如代码里有一些小函数,而这些函数一般只被调用一次(比如函数指针)
connect(cancelAction, &QAction::triggered, this, [=](){
ui->textEdit->undo();
});
注:在老代码中还有这种写法(神奇:
5、定时器
可以用用定时器的inherits
判断是否属于某种类
QTimer *timer = new QTimer; // QTimer inherits QObject
timer->inherits("QTimer"); // returns true
timer->inherits("QObject"); // returns true
timer->inherits("QAbstractButton"); // returns false
6、在结构体中qDebug输出自定义的信息。(也可以自己封装tostring方法)
struct FunctionInfo {
QString function;
QString name;
QString groupEnabled;
QString action;
QString group;
friend QDebug operator << (QDebug debug, const FunctionInfo &functionInfo) {
QString info = QString("功能: %1 名称: %2 启用: %3 方法: %4 分组: %5")
.arg(functionInfo.function).arg(functionInfo.name).arg(functionInfo.groupEnabled)
.arg(functionInfo.action).arg(functionInfo.group);
debug << info;
return debug;
}
};
7、.pro文件相对路径踩坑
注:在项目的.pro文件中相对路径的起点不都是pro文件
其中INCLUDEPATH
中的相对路径的起点是相对pro文件的;
但是动态库文件、生成的dubug文件等这些的相对路径起点是构建目录的(project中的bulid directory)
mutex 线程加锁
信号量,实现线程同步
qsemaphore