-
快捷键:
F4:.cpp
与.h
文件之间的相互切换
Alt+左键:返回上一个操作/操作的文件
Alt+右键:返回下一个操作/操作的文件
Ctrl+/:快捷注释/取消注释
Ctrl+i:自动缩进 -
信号槽相关知识:
connect
的第五个参数:
Qt::AutoConnection | 默认值 ,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。 |
---|---|
Qt::DirectConnection | 槽函数会在信号发送的时候直接被调用 ,槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。 |
Qt::QueuedConnection | 槽函数在控制回到接收者所在线程的事件循环时被调用 ,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。 |
Qt::BlockingQueuedConnection | 槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。 |
Qt::UniqueConnection | 这个flag可以通过按位或 与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。 |
- 字符串相关操作:
QString
转int
:
QString str="11";
int a=str.toInt();
int
转QString
:
int a=11;
QString str=QString::number(a);
QString
转char*
:
1.转为Utf8字符集
的char*
QString qstr = "hello!";
char *ch = qstr.toUtf8().data();
2.转换为Latin1字符集
的char*
QString qstr = "test";
char *ch = qstr.toLatin1().data();
当QString
内含有中文时,转换为 char * 就是乱码
解决方案一:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
然后把toLatin1()
改成toLocal8Bit()
解决方案二:
先将 QString
转为标准库中的 string
类型,再 转为 char *
QString qstring = "你好!";
std::string str = qstring.toStdString();
const char *ch = str.c_str();