导读目录
文件类
选择文件
//定义文件对话框类
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();
}
获取文件夹中所有子文件或文件目录-上同
#include <QDirIterator>
///获取文件列表
QStringList Filelist;
QDirIterator it(Dir_Path,QDir::Files | QDir::NoDotAndDotDot ,QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
QFileInfo fileInfo = it.fileInfo();
if(fileInfo.exists())
Filelist.append(fileInfo.absoluteFilePath());
}
编码格式
使用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");
生成随机数
#include<QDebug>
qsrand(time(NULL));
for(int i=0;i<100000;i++)
{
// qDebug()<<"[i] -- "<<i;
if((i+1)%1000==0)
{
//时间随机;
//500以内随机数
int n=qrand()%500;
qDebug()<<"休眠 --"<< n;
msleep(n);
}
}
按钮进度条样式
//设置pushButton_7 按钮的进度条样式
//zhanbi 进度百分比 (0,1)之间
ui->pushButton_7->setStyleSheet("#pushButton_7{ "
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, "
"stop:0 rgba(2,132,236,1.000),"
"stop:"+QString::number(qMax(zhanbi-0.05,0.0))+" rgba(2,132,236,1.000),"
"stop:"+QString::number(zhanbi)+" rgba(255, 255, 255, 255),"
" stop:1 rgba(255, 255, 255, 255));"
"border:1px solid #0288F3;min-height:22px;border-radius:3px}");
宏定义
判断闰年、获取对应年月的天数
///判断是否是闰年
#define LEAP_YEAR(x) (!(x%400) || (!(x%4) && (x%100)))
///获取年月对应的天数
#define getyear_month_days(year,month) ( \
((month)==2)?(LEAP_YEAR(year)?29:28): \
((((month)==4)||((month)==6)||((month)==9)||((month)==11))?30:31))
虚函数,抽象类
声明虚函数
///使用qt creator开发
///使用msvc2017或msvc2015 编译器开发时创建虚函数需要追加 const=0
virtual bool isrefresh_data() const=0{
return false;
}
///mingw 则不需要
virtual QVariant isrefresh_data(QStringList type);
声明抽象类
///
/// \brief 抽象
//
class Product
{
public:
virtual ~Product(){}
///
/// \brief 获取数据 -最终结果
/// \param 界面参数字典
/// \param 数据要素类型
/// \return
///
virtual QVariant getResult(QMap<QString,QString> DataMap,QStringList type);
}
INI文件读写
void SetValue(QString Group,QString Title,QVariant Values)
{
std::cout<<" IniPath : "<<IniPath.toStdString()<<std::endl;
QSettings *settings=new QSettings(IniPath, QSettings::IniFormat); // 当前目录的INI文件
settings->setIniCodec("UTF-8");
settings->beginGroup(Group);
settings->setValue(Title, Values);
settings->endGroup();
delete settings;
}
void SetValue(QString Group,QString Title,QVariant Values,char * Codec)
{
std::cout<<" IniPath : "<<IniPath.toStdString()<<std::endl;
QSettings *settings=new QSettings(IniPath, QSettings::IniFormat); // 当前目录的INI文件
settings->setIniCodec(Codec);
settings->beginGroup(Group);
settings->setValue(Title, Values);
settings->endGroup();
delete settings;
}
QVariant ReadValue(QString Group,QString Title)
{
QSettings *settings=new QSettings(IniPath, QSettings::IniFormat); // 当前目录的INI文件
settings->setIniCodec("UTF-8");//在此添加设置,即可读写ini文件中的中文
settings->beginGroup(Group);
QVariant Qvar= settings->value(Title);
// QMessageBox::information(nullptr,"directory Changed", settings.value("text").toString());
settings->endGroup();
delete settings;
return Qvar;
}
QVariant ReadValue(QString Group,QString Title,const char* Codec)
{
QSettings *settings=new QSettings(IniPath, QSettings::IniFormat); // 当前目录的INI文件
settings->setIniCodec(QTextCodec::codecForName(Codec));//在此添加设置,即可读写ini文件中的中文
settings->beginGroup(Group);
QVariant Qvar= settings->value(Title);
settings->endGroup();
delete settings;
return Qvar;
}