导读目录
文件类
选择文件
//定义文件对话框类
QFileDialog *fileDialog = new QFileDialog(this);
//定义文件对话框标题
fileDialog->setWindowTitle(QStringLiteral("选中文件"));
//设置默认文件路径
fileDialog->setDirectory(".");
//设置文件过滤器
fileDialog->setNameFilter(tr("xlsx(*.xlsx);;db(*.db)"));
//设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles xlsx(*.xlsx);;
fileDialog->setFileMode(QFileDialog::ExistingFiles);
//设置视图模式
fileDialog->setViewMode(QFileDialog::Detail);
//打印所有选择的文件的路径
QStringList fileNames;
if (fileDialog->exec()) {
fileNames = fileDialog->selectedFiles();
}
选择文件夹
QString directory=QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this,tr("选择文件夹"),""));
if(!directory.isEmpty()){}
使用本地程序打开文件路径
bool ok = QDesktopServices::openUrl(QUrl::fromLocalFile(info.absoluteFilePath()));
if(!ok)
{
QMessageBox mymessage(this);
mymessage.setIcon(QMessageBox::Information);
mymessage.setWindowTitle("提示");
mymessage.setText("未能打开文件["+info.absoluteFilePath()+"]!");
QPushButton *btnYes = mymessage.addButton(tr("关闭"), QMessageBox::YesRole);
mymessage.exec();
}
文件另存为
QString file_full = QFileDialog::getSaveFileName(this,tr("Save File"),tr("filename"),tr("*.xlsx"));
if(file_full!="")
{
}
以指针的方式 获取文件夹中所有文件
#include <QDirIterator>
QDirIterator it(QDirpath,QDir::Files | QDir::NoDotAndDotDot ,QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
QFileInfo fileInfo = it.fileInfo();
}
编码格式
使用MSVC 2017编码器开发时,常量中包含中文,就会出现常量中有换行符的异常:
在头文件中添加
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
或者代码中添加
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("gbk");
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec* codec =QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
#endif
属性设置(get/set)
Q_PROPERTY(bool IsPaging MEMBER q_isPaging NOTIFY ispagingChanged)
Q_PROPERTY(int page_num READ getpagenum WRITE setpagenum RESET pagenumResert)
/*对应类中声明
public slots:
void ispagingChanged();
private:
bool q_isPaging=true;
int q_page_num;
int getpagenum();
void setpagenum(int num);
void pagenumResert(){q_page_num=10;};
*/
使用QT自带的图标
qt软件中自带图标,有时为了方便可以直接引用
Fusion样式下常用图标
使用:
QIcon icon = QApplication::style()->standardIcon((QStyle::StandardPixmap)0);
内置图标显示
QApplication::setStyle("Fusion");
//QTableWidget控件
ui->tableWidget->clear();
ui->tableWidget->setRowCount(7);
ui->tableWidget->setColumnCount(10);
int IconIndex = 0;
for (int row = 0; row < ui->tableWidget->rowCount(); row++){
for (int col = 0; col < ui->tableWidget->columnCount(); col++){
QIcon icon = QApplication::style()->standardIcon((QStyle::StandardPixmap)IconIndex);
QTableWidgetItem *item = new QTableWidgetItem(icon, QString::number(IconIndex));
ui->tableWidget->setItem(row, col, item);
IconIndex++;
}
}
数据库连接
用这种方式可以防止多数据库频繁连接断开时,频繁输出警告信息
SQLITE数据库连接
//#include <QUuid>
QString conn_guids=QUuid::createUuid().toString();
QSqlDatabase* soft_DataBase=new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE",conn_guids));
soft_DataBase->setDatabaseName(dbpath);
if (!soft_DataBase->open()) {
qWarning() << "---不能打开软件数据库连接: " << soft_DataBase->lastError().driverText();
}
//断开连接
soft_DataBase->close();
delete soft_DataBase;
soft_DataBase = NULL;
soft_DataBase::removeDatabase(conn_guids);
SQL SERVER 数据库连接
QSqlDatabase* remote_DataBase=new QSqlDatabase(QSqlDatabase::addDatabase("QODBC","remote_DataBase_QODBC_SQLSERVER"));
Connect_Str=QString("DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4;").
arg(_serverIp).arg(_serverDataBase).arg(_serverLoginName).arg(_ServerPassWord);
remote_DataBase->setDatabaseName(Connect_Str);
if(!remote_DataBase->open())
return false;
//断开连接
remote_DataBase->close();
delete remote_DataBase;
remote_DataBase = NULL;
QSqlDatabase::removeDatabase("remote_DataBase_QODBC_SQLSERVER");