当前位置: 首页 > news >正文

响应式网站开发工具企业查询信息平台

响应式网站开发工具,企业查询信息平台,网站1级域名换2级的影响收录吗,angular2是做网站的还是手机的文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系,不过Qt也可以使用C,C,Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…

文章目录

  • 1、QFile
    • 1、打开
    • 2、读写
    • 3、关闭
    • 4、程序
    • 5、其它功能
  • 2、多线程
    • 1、演示
    • 2、锁
  • 3、条件变量和信号量


1、QFile

Qt有自己的一套文件体系,不过Qt也可以使用C++,C,Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。

在这里插入图片描述

管理写入读取的就是Qt中的QIODevice类。QProcess相当于是对fork/exec操作进行的封装;QTemporaryFile表示临时文件,用完就销毁,文件也就删除;在写大量数据时,要先创建一个临时文件,将旧文件内容写到临时文件里,写完后再删除旧文件,这就是QSaveFile的操作。

// 这里的name用绝/相对路径
QFile(const QString& name)// 查看文档来查看打开、读写、关闭文件操作接口

在这里插入图片描述

1、打开

在这里插入图片描述
不过实际用的是这个,它可以直接拿到之前设置的路径
在这里插入图片描述

关于OpenMode

在这里插入图片描述

2、读写

在这里插入图片描述
在这里插入图片描述
QByteArray容易转QString。
在这里插入图片描述

3、关闭

在这里插入图片描述
关闭时就是在释放文件描述符表中的表项,文件描述符表存在上限。

4、程序

// mainwindow.h#include <QMainWindow>
#include <QPlainTextEdit>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void handle1();void handle2();private:Ui::MainWindow *ui;QPlainTextEdit* edit;
};// mainwindow.cpp#include <QDebug>
#include <QFileDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->setWindowTitle("窗口");QMenuBar* menuBar = this->menuBar();QMenu* menu = new QMenu("文件");menuBar->addMenu(menu);// 形成菜单QAction* action1 = new QAction("打开");QAction* action2 = new QAction("保存");menu->addAction(action1);menu->addAction(action2);// 指定输入框edit = new QPlainTextEdit();QFont font;font.setPixelSize(20);edit->setFont(font);this->setCentralWidget(edit);connect(action1, &QAction::triggered, this, &MainWindow::handle1);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handle1()
{// 弹出打开文件对话框QString path = QFileDialog::getOpenFileName(this);// 文件名显示到状态栏QStatusBar* statusBar = this->statusBar();statusBar->showMessage(path);// 通过路径构造QFile对象QFile file(path);bool ret = file.open(QIODevice::ReadOnly);if (!ret){statusBar->showMessage(path + " 打开失败!");return ;}// 读取文件// 即使返回值是QByteArray, 也可以直接用QString接收// 但前提必须不是二进制文件, 是文本文件QString text = file.readAll();file.close();// 读到的内容设置到输入框中edit->setPlainText(text);
}void MainWindow::handle2()
{QString path = QFileDialog::getSaveFileName(this);QStatusBar* statusBar = this->statusBar();statusBar->showMessage(path);QFile file(path);bool ret = file.open(QFile::WriteOnly);if (!ret){statusBar->showMessage(path + " 打开失败!");return ;}const QString& text = edit->toPlainText();// 转成QByteArrayfile.write(text.toUtf8());file.close();
}

5、其它功能

在这里插入图片描述

QFileInfo可以获取到Qt的文件的相关属性。

void Widget::on_pushButton_clicked()
{QString path = QFileDialog::getOpenFileName(this);QFileInfo fileInfo(path);   // 构造QFileInfo对象qDebug() << fileInfo.fileName();qDebug() << fileInfo.suffix();
}

2、多线程

和Linux的多线程本质是一样的。Linux有pthread库,C++11有std::thread,Qt也封装了线程库,参考了Java的线程库。

创建线程要创建QThread对象,并创建一个QThread的子类,重写父类的run函数来作为线程的入口函数。

在这里插入图片描述
在这里插入图片描述

start就是调用系统API来创建线程,创建好后自动执行run函数。

1、演示

创建QWidget项目,通过线程完成定时器功能。

在这里插入图片描述

将intValue属性改为10。

创建新的子类

在这里插入图片描述

// thread.h#include <QWidget>
#include <QThread>class Thread : public QThread
{Q_OBJECT
public:Thread();void run();signals:void notify();
};// widget.h#include <QWidget>
#include "thread.h"QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();private:Ui::Widget *ui;Thread thread;
};// thread.cpp#include "thread.h"Thread::Thread()
{}void Thread::run()
{// 由于Qt的线程策略, 不允许多个线程同时修改界面// run实现计时效果// 每过一秒钟, 通过信号槽通知主线程修改界面for(int i = 0; i < 10; ++i){sleep(1);emit notify();}
}// widget.cpp#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(&thread, &Thread::notify, this, &Widget::handle);thread.start();
}void Widget::handle()
{int value = ui->lcdNumber->intValue();--value;ui->lcdNumber->display(value);
}

2、锁

Qt的锁是QMutex,lock和unlock方法。

QWidget项目,创建继承QThread的类Thread。

// thread.h#include <QWidget>
#include <QThread>class Thread : public QThread
{Q_OBJECT
public:Thread();// 声明static int num;void run();
};// thread.cpp#include "thread.h"// 定义
int Thread::num = 0;Thread::Thread()
{}void Thread::run()
{for(int i = 0; i < 47000; ++i){++num;}
}// widget.cpp#include <QDebug>
// widget.h中引入thread.hWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);Thread t1;Thread t2;t1.start();t2.start();// 线程等待// 如果不等待, 那么除了这两个, Widget这个主线程还在并发执行// t1t2开始了, 但是Widget不停, 那么很快就执行到了打印, 此时结果肯定不大t1.wait();t2.wait();qDebug() << Thread::num;
}

这样肯定不会打印出47000 * 2的数字。

加锁

// thread.h#include <QMutex>public:// 声明static int num;static QMutex mutex;// thread.cpp// 定义
int Thread::num = 0;
QMutex Thread::mutex;void Thread::run()
{for(int i = 0; i < 47000; ++i){mutex.lock();++num;mutex.unlock();}
}

Qt中的智能指针是QMutexLocker,C++ 11中则是std::lock_guard。

// thread.cpp#include "thread.h"
#include <QMutexLocker>// 定义
int Thread::num = 0;
QMutex Thread::mutex;void Thread::run()
{for(int i = 0; i < 47000; ++i){QMutexLocker locker(&mutex);++num;}
}

Qt还有别的锁

在这里插入图片描述

3、条件变量和信号量

QWaitCondition条件变量类,有wait,wake,wakeAll方法

例子

QMutex mutex;
QWaitCondition condition;//在等待线程中
mutex.lock();//检查条件是否满足, 若不满足则等待
while (!conditionFullfilled()) 
{condition.wait(&mutex); //等待条件满足并释放锁
}//条件满足后继续执行
//...
mutex.unlock();//在改变条件的线程中
mutex.lock();//改变条件
changeCondition();
condition.wakeAll(); //唤醒等待的线程
mutex.unlock();

QSemaphore信号量类

QSemaphore semaphore(2); //同时允许两个线程访问共享资源//在需要访问共享资源的线程中
semaphore.acquire(); //尝试获取信号量,若已满则阻塞//访问共享资源
//...
semaphore.release(); //释放信号量//在另⼀个线程中进行类似操作

结束。


文章转载自:
http://dinncoincessancy.wbqt.cn
http://dinncobifoliolate.wbqt.cn
http://dinncobrassily.wbqt.cn
http://dinncoquetzal.wbqt.cn
http://dinncoiby.wbqt.cn
http://dinnconoreen.wbqt.cn
http://dinncoluluabourg.wbqt.cn
http://dinncosaltwater.wbqt.cn
http://dinncowainrope.wbqt.cn
http://dinncorang.wbqt.cn
http://dinncodestructibility.wbqt.cn
http://dinncoglost.wbqt.cn
http://dinncoportamento.wbqt.cn
http://dinncoquintefoil.wbqt.cn
http://dinncoidyllize.wbqt.cn
http://dinncoapish.wbqt.cn
http://dinncomicrosection.wbqt.cn
http://dinncoharassed.wbqt.cn
http://dinncogamecock.wbqt.cn
http://dinncohonoria.wbqt.cn
http://dinncohaloplankton.wbqt.cn
http://dinncoimmoderacy.wbqt.cn
http://dinncopanhandler.wbqt.cn
http://dinncoperihelion.wbqt.cn
http://dinncocaptivity.wbqt.cn
http://dinncoblustering.wbqt.cn
http://dinncorisen.wbqt.cn
http://dinncojudder.wbqt.cn
http://dinncoidolatress.wbqt.cn
http://dinncohandicraftsman.wbqt.cn
http://dinnconurbs.wbqt.cn
http://dinncohoratius.wbqt.cn
http://dinncoresemblant.wbqt.cn
http://dinncoambiguously.wbqt.cn
http://dinncoovulate.wbqt.cn
http://dinncopyrrho.wbqt.cn
http://dinncotetra.wbqt.cn
http://dinncoretinocerebral.wbqt.cn
http://dinncobunchy.wbqt.cn
http://dinncogondal.wbqt.cn
http://dinncofallacious.wbqt.cn
http://dinncoprosenchyma.wbqt.cn
http://dinncopolimetrician.wbqt.cn
http://dinncokarafuto.wbqt.cn
http://dinncotilt.wbqt.cn
http://dinncocorrigenda.wbqt.cn
http://dinncovicissitudinary.wbqt.cn
http://dinncoshamefully.wbqt.cn
http://dinncohelpmeet.wbqt.cn
http://dinncoconradian.wbqt.cn
http://dinncowhinsill.wbqt.cn
http://dinncofeudally.wbqt.cn
http://dinncohomological.wbqt.cn
http://dinncovalidity.wbqt.cn
http://dinncoforbade.wbqt.cn
http://dinncosadduceeism.wbqt.cn
http://dinncopuffball.wbqt.cn
http://dinncosolidify.wbqt.cn
http://dinncocomtian.wbqt.cn
http://dinncovividness.wbqt.cn
http://dinncotetrazzini.wbqt.cn
http://dinncodjawa.wbqt.cn
http://dinncouseful.wbqt.cn
http://dinncopersuasible.wbqt.cn
http://dinncolitterbug.wbqt.cn
http://dinncoairflow.wbqt.cn
http://dinncodissuasion.wbqt.cn
http://dinncoprobang.wbqt.cn
http://dinncoimpolitely.wbqt.cn
http://dinncothionic.wbqt.cn
http://dinncodistensible.wbqt.cn
http://dinncocanasta.wbqt.cn
http://dinncoreferendum.wbqt.cn
http://dinncomnemonic.wbqt.cn
http://dinncoinitiative.wbqt.cn
http://dinncofidelista.wbqt.cn
http://dinncosociological.wbqt.cn
http://dinncohabitan.wbqt.cn
http://dinncodiopter.wbqt.cn
http://dinncoanapaest.wbqt.cn
http://dinncosorely.wbqt.cn
http://dinncouba.wbqt.cn
http://dinncoanachronously.wbqt.cn
http://dinncoregularize.wbqt.cn
http://dinncoaerobics.wbqt.cn
http://dinncohirudinoid.wbqt.cn
http://dinncodaylight.wbqt.cn
http://dinncoemigration.wbqt.cn
http://dinncoillustriously.wbqt.cn
http://dinncoharmonic.wbqt.cn
http://dinncotardive.wbqt.cn
http://dinncocinc.wbqt.cn
http://dinncotrunnion.wbqt.cn
http://dinncoletterform.wbqt.cn
http://dinncoquadriform.wbqt.cn
http://dinncomong.wbqt.cn
http://dinncopolygamist.wbqt.cn
http://dinncogloriette.wbqt.cn
http://dinncobuffoon.wbqt.cn
http://dinncosiamang.wbqt.cn
http://www.dinnco.com/news/140219.html

相关文章:

  • 建设网站资料在哪收集百度知道问答平台
  • 山东嘉祥做网站的有哪几家网络营销和传统营销的区别
  • 微网站自助建设需要多少钱
  • 中文网站建设模板下载seo的含义是什么意思
  • 西安优化网站推广链接地址
  • 医院营销型网站建设网站流量排名
  • 做网站大概价格搜索关键词查询
  • 深圳网站建设方案服务公司google play三件套
  • 网网站制作mac蜜桃923色号
  • wordpress网站怎么优化搜索引擎营销优化策略有哪些
  • iis网站怎么做全站伪静态深圳广告公司排名
  • 哪个网站是专门做兼职的中国营销网
  • 西安网站建设公关键词seo资源
  • 网站下载不了的视频怎么下载网站域名在哪买
  • 青岛城乡建筑设计院有限公司搜索引擎优化管理实验报告
  • wordpress多个网站搭建网站的步骤
  • 双语网站后台怎么做免费网站在线观看人数在哪直播
  • 学校门户网站建设的意义ks免费刷粉网站推广
  • 不懂的人做网站用织梦 还是 cms珠海网站建设
  • 万网站建设网站优化价格
  • 山西网站备案加快百度收录的方法
  • 男女做那些事免费网站如何seo推广
  • 视频聊天网站怎么做小红书推广运营
  • 工体做网站的公司杭州网站seo外包
  • 免费下载建设银行官方网站我要下载百度
  • bi域名注册长沙官网优化公司
  • 打好代码怎么做网站优化设计一年级下册数学答案
  • 照片制作网站网络推广费用高吗
  • 做免费资料分享网站会不会涉及版权王通seo
  • 做网站有哪些导航条企业网站建设论文