- QCamera中获取设备的配置参数比如支持的分辨率集合等,需要先调用load后才能正确获取,或者关联stateChanged信号中判断状态是否是ActiveState,然后再读取。
camera = new QCamera(this);
camera->load();
QList<QSize> sizes = camera->supportedViewfinderResolutions();
emit resolutions(sizes);
QCameraViewfinderSettings set;
set.setResolution(cameraWidth, cameraHeight);
camera->setViewfinderSettings(set);
camera->unload();
camera = new QCamera(this);
connect(camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(stateChanged(QCamera::State)));
void CameraThread::stateChanged(QCamera::State state)
{
if (state == QCamera::ActiveState) {
QList<QSize> sizes = camera->supportedViewfinderResolutions();
emit resolutions(sizes);
QCameraViewfinderSettings set;
set.setResolution(cameraWidth, cameraHeight);
camera->setViewfinderSettings(set);
}
}
camera = new QCamera(this);
camera = new QCamera(cameraName.toUtf8(), this);
- 很多时候需要在窗体首次显示的时候加载一些东西,而且只加载一次,当窗体再次显示的时候不加载。为什么不是在构造函数呢?因为很多玩意都是要在显示后才能确定,比如控件的尺寸,部分样式表的应用。
void Widget::showEvent(QShowEvent *)
{
static bool isLoad = false;
if (!isLoad) {
isLoad = true;
}
}
- Qt获取当前所用的Qt版本、编译器、位数等信息。
QString compilerString = "<unknown>";
{
#if defined(Q_CC_CLANG)
QString isAppleString;
#if defined(__apple_build_version__)
isAppleString = QLatin1String(" (Apple)");
#endif
compilerString = QLatin1String("Clang ") + QString::number(__clang_major__) + QLatin1Char('.') + QString::number(__clang_minor__) + isAppleString;
#elif defined(Q_CC_GNU)
compilerString = QLatin1String("GCC ") + QLatin1String(__VERSION__);
#elif defined(Q_CC_MSVC)
if (_MSC_VER > 1999) {
compilerString = QLatin1String("MSVC <unknown>");
} else if (_MSC_VER >= 1920) {
compilerString = QLatin1String("MSVC 2019");
} else if (_MSC_VER >= 1910) {
compilerString = QLatin1String("MSVC 2017");
} else if (_MSC_VER >= 1900) {
compilerString = QLatin1String("MSVC 2015");
} else if (_MSC_VER >= 1800) {
compilerString = QLatin1String("MSVC 2013");
} else if (_MSC_VER >= 1700) {
compilerString = QLatin1String("MSVC 2012");
} else if (_MSC_VER >= 1600) {
compilerString = QLatin1String("MSVC 2010");
} else {
compilerString = QLatin1String("MSVC <old>");
}
#endif
}
QString version = QString("%1 %2 %3").arg(qVersion()).arg(compilerString).arg(QString::number(QSysInfo::WordSize));
- QDateTime可以直接格式化输出星期几周几,Qt6默认按照英文输出比如 ddd = 周二 Tue dddd = 星期二 Tuesday ,此时如果只想永远是中文就需要用到QLocale进行转换。
QDateTime::currentDateTime().toString("ddd");
QDateTime::currentDateTime().toString("dddd");
QDateTime::currentDateTime().toString("ddd");
QDateTime::currentDateTime().toString("dddd");
QLocale locale;
locale.toString(QDateTime::currentDateTime(), "ddd");
locale.toString(QDateTime::currentDateTime(), "dddd");
- QSqlTableModel大大简化了对数据库表的显示、添加、删除、修改等,唯独对数据库分页操作有点绕弯。
QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("table");
model->setSort(0, Qt::AscendingOrder);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
ui->tableView->setModel(model);
model->setFilter("1=1 order by id desc limit 100");
model->setSort(0, Qt::AscendingOrder);
model->setFilter("1=1 order by id desc limit 100");
model->setFilter("name='张三'");
model->setFilter("1=1 order by id asc limit 5,10");
model->setFilter("1=1 and name='张三' and result>=70;");
model->setFilter("1=1 and name='张三' order by id desc limit 10,100;");
model->insertRow(2);
model->setData(model->index(2, 0), 100);
model->setData(model->index(2, 1), "张三");
model->submitAll();
model->removeRow(3);
model->submitAll();
model->revertAll();