0
点赞
收藏
分享

微信扫一扫

QT开发简单常用功能汇总示例

爱我中华8898 2022-04-26 阅读 76
qt数据库

导读目录

文件类

选择文件

//定义文件对话框类
 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");
举报

相关推荐

0 条评论