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();
   }

获取文件夹中所有子文件或文件目录-上同

#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;
    }
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得鹿梦鱼、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值