适用Qt版本:4.5.2
1、setValue和signal valueChanged
setValue在两种情况下不触发signal valueChanged:
a:传入一个原有的值。
b:传入一个范围以外的值。
适用于QSpinBox、QSlider、QProgressBar等。
2、QDialog和QWidget
a、QPushButton的default property适用于QDialog,而不是QWidget
3、regular expression
曾经写过这么一句code:
hexEdit->setValidator(new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1, 2}"), hexEdit));
注意在设置字符次数的数字中间有一个空格,该多余空格导致regular expression设置失败。
4、QSplitter
a、一个QSplitter,要么是水平方向上排列多个QWidget(1*column),要么是在垂直方向上排列多个QWidget(row*1);要想获取一个通用的row*column的QWidget组合,可以使用splitter->addWidget(otherSplitter)的方式组合多个splitters。
b、对于上述方法创建的一个QWidget组合,要想同步移动不同QSplitter内的QWidget暂时还是不行的(比如,水平移动索引为(2,3)的QWidget,同时移动列索引为3的所有QWidget)。为了同步,需要添加具体特定的QSplitter(比如splitter)的signal splitterMoved的响应函数;在该函数内部设置:otherSplitter->setSizes(splitter->sizes())。
5、QString
QString提供的功能也许太多了,有些常见用法偶尔也不是那么容易找到的。
a、转换QString为const char *:
const char *qPrintable(const QString &str),同时需要注意返回值的有效期很短。
b、子字符串:
QString QString::mid(int start, int size = -1) const
6、QTextStream
QTextStream一个类具有读写两种功能,不像stl中的ifstream、ofstream两者各司其职;另外使用stl中的fstream只需提供一个文件名,而QTextStream则通常还需要创建一个QFile对象。
无论怎样,qt的优势在于它提供了一整套的实现方案,使用它的时候,是保持一种统一的风格,而最好不要在Qt和stl之间反复的转变。
读写文件时典型用法如下:
QFile file(fname);
if(!file.open(QFile::ReadOnly) || !file.exists())
{
qWarning("Open file error!");
return;
}
QTextStream fileStream(&file);
读写stdin、stdout、stderr(FILE *)要简单一些:
QTextStream cin(stdin, QIODevice::ReadOnly);
QTextStream cout(stdout, QIODevice::WriteOnly);
QTextStream cerr(stderr, QIODevice::WriteOnly);
注意:读写stdin、stdout时,请注意务必要链接正确的库,即debug版本对应debug版本的lib文件,release亦是如此;否则很可能会出现令人难以琢磨的crash。
Practical Qt
最新推荐文章于 2024-07-15 01:02:54 发布