- QCamera中獲取設備的配置引數比如支持的解析度集合等,需要先呼叫load后才能正確獲取,或者關聯stateChanged信號中判斷狀態是否是ActiveState,然后再讀取,
//方法1:呼叫load后獲取
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();
//方法2:通過事件信號獲取
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);
}
}
//QCamera沒有指定設備名稱的時候則采用默認的攝像機
camera = new QCamera(this);
//cameraName = @device:pnp:\\\\?\\usb#vid_046d&pid_0825&mi_00#6&212eebd3&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global
//可以通過設備描述符來查找設備名稱(唯一標識)
camera = new QCamera(cameraName.toUtf8(), this);
- 很多時候需要在表單首次顯示的時候加載一些東西,而且只加載一次,當表單再次顯示的時候不加載,為什么不是在建構式呢?因為很多玩意都是要在顯示后才能確定,比如控制元件的尺寸,部分樣式表的應用,
void Widget::showEvent(QShowEvent *)
{
static bool isLoad = false;
if (!isLoad) {
isLoad = true;
//執行對應的處理
}
}
- Qt獲取當前所用的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
}
//拓展知識 查看 QSysInfo 類下面有很多好東西
// qVersion() = QT_VERSION_STR
QString version = QString("%1 %2 %3").arg(qVersion()).arg(compilerString).arg(QString::number(QSysInfo::WordSize));
- QDateTime可以直接格式化輸出星期幾周幾,Qt6默認按照英文輸出比如 ddd = 周二 Tue dddd = 星期二 Tuesday ,此時如果只想永遠是中文就需要用到QLocale進行轉換,
//格式化輸出受到本地作業系統語言的影響
//英文作業系統
//這樣獲取到的是Mon到Sun,英文星期的3個字母的縮寫,
QDateTime::currentDateTime().toString("ddd");
//這樣獲取到的是Monday到Sunday,英文星期完整單詞,
QDateTime::currentDateTime().toString("dddd");
//中文作業系統
//這樣獲取到的是周一到周日,
QDateTime::currentDateTime().toString("ddd");
//這樣獲取到的是星期一到星期日,
QDateTime::currentDateTime().toString("dddd");
//主動指定語言轉換
//如果沒有指定本地語言則默認采用系統的語言環境,
QLocale locale;
//QLocale locale = QLocale::Chinese;
//QLocale locale = QLocale::English;
//QLocale locale = QLocale::Japanese;
//下面永遠輸出中文的周一到周日
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);
//測驗發現過濾條件中除了可以帶where陳述句還可以帶排序及limit等
model->setFilter("1=1 order by id desc limit 100");
//如果在過濾條件中設定了排序陳述句則不可以再使用setSort方法
//下面的代碼結果是執行出錯,可能因為setSort又重新增加了order by陳述句導致多個order by陳述句沖突了,
model->setSort(0, Qt::AscendingOrder);
model->setFilter("1=1 order by id desc limit 100");
//通過setFilter設定單純的where陳述句可以不用加1=1
model->setFilter("name='張三'");
//如果還有其他陳述句比如排序或者limit等則需要最前面加上1=1
//下面表示按照id升序排序,查詢結果顯示第5-15條記錄,
model->setFilter("1=1 order by id asc limit 5,10");
//多個條件用and連接
//建議任何時候用了setFilter則最前面寫1=1最末尾加上 ; 防止有些地方無法正確執行,
model->setFilter("1=1 and name='張三' and result>=70;");
//下面表示查詢姓名是張三的記錄,按照id欄位降序排序,結果從第10條開始100條,相當于從第10條到110條記錄,
model->setFilter("1=1 and name='張三' order by id desc limit 10,100;");
//在第3行開始添加一條記錄
model->insertRow(2);
//立即填充剛剛新增加的行,默認為空需要用戶手動在表格中輸入,
model->setData(model->index(2, 0), 100);
model->setData(model->index(2, 1), "張三");
//提交更新
model->submitAll();
//洗掉第4行
model->removeRow(3);
model->submitAll();
//總之有增刪改操作后都需要呼叫model->submitAll();來真正執行,否則僅僅是資料模型更新了資料,并不會更新到資料庫中,
//撤銷更改
model->revertAll();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/306492.html
標籤:其他
上一篇:Mybatis-Plus分頁查詢
下一篇:cgb2108-day06
