记录常用的用过的Qt相关操作,方便使用。
类型转换
QString与基本数据类型转换:
QString str =“100”;
int tmp = str.tolnt();
int tmp = 100;
QString str = QString::number(tmp);
double data= 40.215586810458;
QString str = QString::number(data,'f',10);
#include <QTextStream>
QString num("12.3456789");
double d= num.toDouble();
qDebug()<<fixed<<gSetRealNumberPrecision(7)<<d; // fixed 表示非科学记数法,7表示小数点位数。
转std::string
string s= qstr.toStdString()
QString qstr2 = QString::fromStdString(s);
QTextCodec* code = QTextCodec::codecForName("gb2312");
m_realPath = code->fromUnicode(qfilaPath).data();
Qlmage与Mat转换:(待测试)
Qlmage Mat2Qlmage(const cv::Mat& InputMat)
{
cv::Mat TmpMat;
Qlmage Result;
if (InputMat.channels()==1) {
cv:cvtColor(InputMat, TmpMat, CV_GRAY2RGB);
Result = Qlmage((const uchar*)(TmpMat.data), TmpMat.cols, TmpMat.rowsTmpMat.cols*TmpMat.channels(),Qlmage::Format_Indexed8);
} else {
cv::cvtColor(InputMat, TmpMat, CV_BGR2RGB);
Result = Qlmage((const uchar*)(TmpMat.data), TmpMat.cols, TmpMat.rows, TmpMat.cols*TmpMat.channels(), Qlmage::Format_RGB888);
}
Result.bits();
return Result;
}
窗口操作
打开文件夹并显示图片
QString filename;
filename = QFileDialog::getOpenFileName(this,
tr("Select picture to open"),
"",
tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));//可打开的文件类型
// 打开文件夹
// QString ImagePath = QFileDialog::getExistingDirectory(this, "请选择路径...", "./");
if (!filename.isEmpty()) {
QImage* img = new QImage;
if (!(img->load(filename))) { //加载图像
QMessageBox::information(this, tr("fail"), tr("fail!"));
delete img;
}
//ui.label->setPixmap(QPixmap::fromImage(*img));
ui.label->setPixmap(QPixmap::fromImage(img->scaled(ui.label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)));//图片自适应窗口大小,保证图像宽高比例
}
提示框创建(参考):
QMessageBox::StandardButton result = QMessageBox::information(&widget, "Title","text");
显示相关
中文显示乱码问题:
QString::fromLocal8Bit("界面显示中文") ;// tr是用来实现国际化,如果你为这个程序提供了中文翻译包(其中hello被翻译成中文"你好"),那么text1的内容将是中文"你好";如果你为程序提供且使用日文翻译包,那么text1的内容将是日文。
或者在高级保存选项中将文件编码格式改为UTF-8,参考链接。
计时
QElapsedTimer time;
time.start();
//程序代码
int milsec = time.elapsed();
qDebug() << time.elapsed() << "ms";
QTimer定时器:
connect(&timer, &QTimer::timeout, this, &ItkDetect::onTimerFrame);
QTimer::singleShot(200, this, SLOT(updateCaption()));//静态函数方法
当前时间
QDateTime dateTime = QDateTime::currentDateTime();//获取系统当前的时间
return dateTime.toString("yyyy-MM-dd hh:mm:ss");//格式化时间
QTableWidget
ui.tableWidget->setColumnCount(2);//设置行列
ui.tableWidget->setRowCount(2);
ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section { border:none; background-color: rgb(230,230,230); font-weight: bold; color: rgb(120, 120, 120); }");
ui.tableWidget->setHorizontalHeaderLabels(QStringList()<<"name"<<"age");//设置表头
ui.tableWidget->verticalHeader()->setVisible(false); //隐藏列表头
ui.tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头
ui.tableWidget->horizontalHeader()->setFixedHeight(60);
ui.tableWidget->setColumnWidth(3,200); //设置行列大小
ui.tableWidget->setRowHeight(3,60);
ui.tableWidget->resizeColumnsToContents(); //自适应
ui.tableWidget->resizeRowsToContents();
ui.tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、 Ctrl+A都可以)
ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次选择一行
ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑
ui.tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
ui.tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //去掉垂直滚动条
//排序,默认排序为升序
ui.tableWidget->setSortingEnabled(true);
ui.tableWidget->sortByColumn(index,Qt::SortOrder::AscendingOrder);//改变第index列为降序排列
ui.tableWidget->sortByColumn(index,Qt::SortOrder::DescendingOrder);//改变第index列为降序排列
//单元格内容更新:直接重新赋值
// 在表格中添加一个新行
int rowIndex = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(rowIndex);
QString fillingRate = QString::number(m_penetration.dFillingRate);
QTableWidgetItem *item = new QTableWidgetItem(fillingRate);
item->setTextAlignment(Qt::AlignCenter);
item->setForeground(QColor(Qt::red));//设置字体颜色,Qt6
ui.tableWidget->setItem(i, 3, item);
//数据读取,行列序号均从0开始
QString str = ui.TableWidget->item(row,column)->text();//取出字符串
int num = str.toInt();//转成int
ui.tbLogs->scrollToBottom();//滚到最后一行
QCombobox
ui.cbCamLists->clear();//清空
ui.cbCamLists->addItem(camNames[camIndex]);//添加元素