栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Qt类快速入门,Markdown笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qt类快速入门,Markdown笔记

QByteArray fromPercentEncoding(const QByteArray &pctEncoded, char percent = '%') -> QByteArray static func;
 - brief: url解码
 - retVal: 返回url解码的数据
toPercentEncoding(const QByteArray &exclude = QByteArray(),const QByteArray &include = QByteArray(),char percent = '%') const -> QByteArray
 - brief: url编码,对象的值没有更新
 - retVal: 返回url编码的数据
QEventLoop exec(enum);
QEventLoop loop;//定义一个事件循环
QTimer::singleShot(2000, &loop, SLOT(quit()));//创建单次定时器,槽函数为事件循环的退出函数
loop.exec();//事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
QFile QFileInfo 快速入门
  • 常用接口

#brief:
    // 构造
    QFileInfo fi = QString("TQFile.cpp");
​
    // 获取绝对路径`相对工作目录`
    QString absoluteFilePath() // 绝对路径 + /TQFile.cpp
    ;
​
    //判断这个路径对应的文件是否存在,true表示存在,false表示不存在
    bool exists();
​
    //根据路径获取到文件的大小,返回值是int64类型,单位为Byte
    qint64 size();
​
    //获取到文件的路径,QFile与之对应的操作
    QString path();
​
    //获取到包含文件名称的路径
    QString filePath();
​
    //获取文件名称
    QString fileName();
​
    //是否是文件
    bool isFile();
​
    //是否是路径。
    bool isDir();
​
    //是否是符号链接。
    bool isSymLink();
​
    //获取符号链接文件
    QString symLinkTarget();
​
    QString qpath= "/usr/test.xxx.yyy";
    QFileInfo fileInfo(qpath);
    
    //获取文件的不包含文件名的路径,返回值为 “/usr”
    fileInfo.path();
    
    //获取到文件的名称,返回值为 “test.xxx.yyy”
    fileInfo.fileName();
    
    //返回 test,不含后缀
    fileInfo.baseName();
    
    //返回 "test.xxx"
    fileInfo.completeBaseName();
​
    //返回 "yyy"
    fileInfo.suffix();
    
    //返回 "xxx.yyy"
    fileInfo.completeSuffix();
​
        QFile   aFile(aFileName);
    if (!aFile.exists()) //文件不存在
        return false;
    if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
        return false;
    ui->textEditDevice->setPlainText(aFile.readAll());
    aFile.close();
    ui->tabWidget->setCurrentIndex(0);
    return  true;
QDir QDir快速入门

// 获取项目路径 QCoreApplication::applicationDirPath();

// 清空路径中 "\" ,转换为  "/"
cleanPath(const QString&) -> QString `路径转换为 \ -> /`
​
// 待测试
toNativeSeparators -> QString `路径转换为 / -> \`
​
QDir dir;
if(dir.mkpath(path))//创建多级目录,如果已存在则会返回去true
QDir dir;
if(dir.mkdir(path))//创建文件夹
//可用QFileInfo QDir的exsit(),IsDir等判断路径情况
QFont
  • example

    double fontRate = 1.0f;
​
    int font_labelList = 16.0f*fontRate,
            font_btnList = 16.0f*fontRate;
​
    bool isBold_labelList = true,
            isBold_btnList = true;
​
#ifdef Def_ScreenPixel_19201080
​
    CScreenRate::Instance()->execute(fontlabel_CHTableTitle);
    CScreenRate::Instance()->execute(fontbtn_CHTableConfirm);
#endif
​
    QFont font;
    font.setFamily(CControlsBase::fontFamily());
​
    font.setPixelSize(fontlabel_CHTableTitle);
    font.setBold(isBoldlabel_CHTableTitle);
    ui->label_CHTableTitle->setFont(font);
​
    // 对齐方式
    ui->label_CHTableTitle->setAlignment(Qt::AlignCenter);
快速入门
// 加粗字体
setBold()
​
// 设置字体像素大小
setPixelSize()
​
// 设置字体大小
setPointSize()
文本对齐方式
ui->doubleSpinBox->setSingleStep(0.01);         // 步长
ui->doubleSpinBox->setAlignment(Qt::AlignRight);//文字右对齐
Qt::Alignment 类型有以下取值。
​
        1)Qt::AlignLeft::水平方向靠左。
​
        2)Qt::AlignRight:水平方向靠右。
​
        3)Qt::AlignHCenter:水平方向居中。
​
        4)Qt::AlignJustify:水平方向调整间距两端对齐。
​
        5)Qt::AlignTop:垂直方向靠上。
​
        6)Qt::AlignButton:垂直方向靠下。
​
        7)Qt::AlignVCenter:垂直方向居中。
​
        8)Qt::AlignCenter:等价于 Qt::AlignHCenter | Qt::AlignVCenter。
QFontMetrics 快速入门
// 构造
fm(QFont("text",20))
    
// 获取文字像素大小
horizontalAdvance("texttext");// 宽
height();// 高
QList的介绍 常用介绍
// 初始化
QList stringList=QList()<<"1"<<"2"<<"3";
QJson
  • json解析

void TQJson::on_json_parse()
{
#if 1
//    QApplication::applicationDirPath();

    QString jstr;
    QStringList jobjList;
    QJsonParseError jerror;
    QJsonDocument jdoc = QJsonDocument::fromJson(jstr.toUtf8(),&jerror);
    QJsonObject jobj,jarrObj;
    QJsonArray jarr;


    if(QJsonParseError::NoError != jerror.error){
        return;
    }
    jobj = jdoc.object();
    jobjList = jobj.keys();
    foreach(QString key,jobjList){

        if(jobj[key].isString()){

            qDebug() << "key:" << key
                     << "value:" << jobj[key].toString();
        }else if(jobj[key].isArray()){

            jarr = jobj[key].toArray();
            for (auto i=0;i 
  • json生成

void TQJson::on_json_encrypt()
{
#if 1
    QJsonDocument jdoc;
    QJsonObject jobj;
    QJsonArray jarr;
    QString jstr;

    for (auto i = 0;i<5; i++) {
        jobj["dataKey"] = "dataValue";
        jarr.append(jobj);
    }

    jobj["arr"] = jarr;
    jobj["dataKey"] = "dataValue";

    jdoc.setObject(jobj);
    jstr = jdoc.toJson(QJsonDocument::Indented);

    qDebug() << jstr;
#endif
}
QMap 介绍 QMap快速入门-知乎
 
QMessageBox的介绍 

警告盒子
@example:
QMessageBox box;
#if 1
//设置文本框的大小
box.setStyleSheet(R"(
QLabel {
min-width: 100;
min-height:50;
font:22px;
}
QPushButton {
background-color:#89AFDE;
border-style: outset;
border-width: 2px;
border-radius: 5px;
border-color: beige;
font: bold 24px;
min-width: 80;
min-height: 35;
}
)"
);
#endif

        box.setText(QString("请先登陆"));
        box.setWindowTitle(QString("警告"));
        box.setIcon(QMessageBox::Icon::Warning );
        box.setButtonText(QMessageBox::Ok , QString("确定"));
        box.exec();
QNetwork
  • debug

    //查看支持的协议
    qDebug()<< Str(支持的协议:)<< manager.supportedSchemes();
    //安装了openssl,会有https
    //("ftp", "file", "qrc", "http", "data")
@example2:
    void CHttp::on_https_debug()
{
    //默认链接的ssl库版本
    qDebug()<< Str(默认链接的ssl库版本:)<< QSslSocket::sslLibraryBuildVersionString();

    //ssl错误
    connect(&manager,&QNetworkAccessManager::sslErrors,
            this,[=](QNetworkReply *reply,const QList &erros){
        qDebug()<< Str(erros:)<< erros;
    });
}

@example2:
void CHttp::on_replyFinished_debug(QNetworkReply *reply)
{
    // log system
    QString debugStr_func
            , *pdebugStr = nullptr;
    pdebugStr = (pdebugStr ? pdebugStr:&debugStr_func);
    AddDebugNStr(*pdebugStr,func , Str(CHttp::on_replyFinished_debug()));

    //请求方式
    AddDebugNStr(*pdebugStr,operation-enum:, (int)reply->operation());

    //状态码
    AddDebugNStr(*pdebugStr,status code, reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
    AddDebugNStr(*pdebugStr,url, QVariant(reply->url()).toString().toStdString().c_str());


    AddDebugNStr(*pdebugStr,, Str(raw header:));
    for(auto aoByteArr:reply->rawHeaderList()){
         AddDebugNStr(*pdebugStr,rawHeaderList, QVariant(aoByteArr).toString());
    }


    //1、获取响应状态码
    QVariant variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if (variant.isValid())
    {
        AddDebugNStr(*pdebugStr,响应状态码, variant.toString());
    }
    //2、获取响应头
    variant = reply->header(QNetworkRequest::ContentTypeHeader);
    if (variant.isValid()){
         AddDebugNStr(*pdebugStr,响应头, variant.toString());
    }

    //3、获取响应信息
    QByteArray bytes = reply->readAll();
    AddDebugNStr(*pdebugStr,响应信息, QVariant(bytes).toString());

    qDebug() << pdebugStr->toStdString().c_str();
}
  • example reply

    QNetworkRequest request;

    //同步处理,可以开启一个局部的事件循环,等待响应,不会阻塞线程
    QNetworkReply *reply=manager.get(request);
    QEventLoop eventLoop;
    connect(reply, &QNetworkReply ::finished, &eventLoop, &QEventLoop::quit);
    eventLoop.exec();

    //处理reply信息
    replyFinished(reply);
  • example

void CHttp::on_request_example()
{
    QUrl url("http://httpbin.org/get");

    //拼接:url添加参数
    QUrlQuery query;
    query.addQueryItem("ie","utf-8");
    url.setQuery(query);
    qDebug()<isRunning()){

        QTimer *timer=new QTimer(reply);//对象树关联释放,也可以在finish进行释放
        timer->setSingleShot(true);
        //超时就结束,abort后状态码为0,错误信息为"Operation canceled"
        connect(timer,&QTimer::timeout,reply,&QNetworkReply::abort);
        //结束就关定时器
        connect(reply,&QNetworkReply::finished,timer,&QTimer::stop);
        //定时
        timer->start(5000);
    }
#elif 1


#endif

}
  • get

void CHttp::get(QString url)
{
    //构建请求对象
    QNetworkRequest request;
    request.setUrl(url);
    request.setRawHeader("Content-Type","application/json");

    qDebug() << request.url()
             << url;

    //发送请求,异步请https://www.baidu.com/求
    QNetworkReply *pReply = manager.get(request);

}
  • post

    //构建请求对象
    QNetworkAccessManager manager;
    QNetworkRequest request;
     connect(&manager,&QNetworkAccessManager::finished,this,&CHttp::replyFinished);
    request.setUrl(url);
    request.setRawHeader("Content-Type","application/json");

    //发送请求,异步请求
    QNetworkReply *pReply = manager.post(request, body.toLatin1());
  • postFile

void CHttp::postFile(QString url, QString filePath, int passTime)
{
    //设置程序编码格式为utf-8
//    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

    QUrl qurl(url);
    QNetworkRequest request;
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json;charset=utf-8");

    //此处要注意上传的ContentType,json文本的话一般带这个参数即可,如果不是,请查阅其他资料,配置其他参数。
    request.setUrl(url);

    // 构造数据,我是直接从文件中读取,简化拼装数据过程
    QFile lfile(filePath);
    lfile.open(QFile::ReadOnly);
    QByteArray dataArray = lfile.readAll();
    lfile.close();

    // 发送请求
    QNetworkReply *pReply = manager.post(request, dataArray);

    SetTimeOut(pReply);
}
  • postImage

    if(QFile::exists(imagePath)){

        qDebug() << "文件不存在" << imagePath;
        return;
    }
    //设置程序编码格式为utf-8
//    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

    //构造multiPart ,用来组装图片数据
    QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
    QHttpPart imagePart;
    QFileInfo fi = imagePath;

    //经测试,设置此content-type,并不是必须。我测试的为jpg文件,则是image/jpeg,其他的格式文件查找http状态码,或者查找HTTP  content-type
    imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));

    //此ContentDispositionHeader参数极为重要,如果不对,则发送图片不成功,name可以随意起名字,但是filename则必须是你要上传的文件名。
    imagePart.setHeader(QNetworkRequest::ContentDispositionHeader
                        , QString("form-data; name="%1"; filename="%2"").arg("f1").arg(fi.fileName()));

    QFile *file = new QFile(imagePath);
    file->open(QIODevice::ReadOnly);
    //依照下面方式将图片文件的内容附着于multiPart上,
    imagePart.setBodyDevice(file);

    file->setParent(multiPart);
    multiPart->append(imagePart);

    //此处设置上传的url
    QNetworkRequest request;
    request.setUrl(url);

    //发送post
    QNetworkReply *pReply = manager.post(request, multiPart);
  • put

void CHttp::put(QString url, QString body)
{
    //构建请求对象
    QNetworkRequest request;
    request.setUrl(url);
    request.setRawHeader("Content-Type","application/json");

    //发送请求,异步请求
    QNetworkReply *pReply = manager.put(request, body.toLatin1());
}
  • setTimeOut

void CHttp::SetTimeOut(QNetworkReply *reply,int timeOut)
{
    Q_ASSERT(reply);
    if(timeOut <=0){qDebug() << "设置超时失败 ,timeOut:" <isRunning()){

        QTimer *timer=new QTimer(reply);//对象树关联释放,也可以在finish进行释放
        timer->setSingleShot(true);

        //超时就结束,abort后状态码为0,错误信息为"Operation canceled"
        connect(timer,&QTimer::timeout,reply,&QNetworkReply::abort);

        //结束就关定时器
        connect(reply,&QNetworkReply::finished,timer,&QTimer::stop);

        //定时
        timer->start(timeOut);
    }
}
  • reply

void CHttp::replyFinished(QNetworkReply *reply)
{

    if(reply->error()!=QNetworkReply::NoError){

        //处理中的错误信息
        qDebug()<<"reply error:"<errorString();
        return;
    }

    // 访问有些网页会返回301/302状态码,需要重新请求重定向的地址。
#if 0
    auto status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    if (status_code == 301 || status_code == 302){

        // Or the target URL if it was a redirect:
        QVariant redirectionTargetUrl =reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
        //qDebug() << "redirection Url is " << redirectionTargetUrl.toString();
        QUrl url(redirectionTargetUrl.toString());
        manager.get(QNetworkRequest(url));
    }
#endif

    //获取响应信息
    const QByteArray reply_data=reply->readAll();

    qDebug() << reply_data;

    reply->deleteLater();
}
QObject QObject快速入门
// QObject对象(或子类)的名称
objectName();

// QObject对象(或子类)的类型名称
metaObject()->className();
connect
@example 
- // 旧版本   
    connect(m_pBtn,SIGNAL(sigClicked()),this,SLOT(onClicked()));
	connect(m_pBtn,SIGNAL(sigClicked(bool)),this,SLOT(onClicked(bool)));

- // QT5.0后推出
	connect(m_pBtn,&MyButton::sigClicked,this,&Widget::onClicked);

- // 有问题待验证
	connect(m_pBtn,QOverload::of(&MyButton::sigClicked),this,&Widget::onClicked);

- // lambda 表达式法 `C++11特性`
	connect(m_pBtn, QOverload::of(&MyButton::sigClicked),

               [=](bool check){

                

                });
	connect(m_pBtn, static_cast(&MyButton::sigClicked), this, [=](bool check){

                 //do something

                 });
  • disconnect

     // 身份证识别完成信号"反"绑定
     disconnect(CIC::Instance(),&CIC::ICNumberSignals,this,&LoginWindow::ICNumberSlots);
  • 信号与槽

qt中信号槽断开连接
在qt中使用信号槽时,有时会想中途断开信号槽的连接,接下来将呈现四种连接断开方法:

one:断开明确指定接受对象信号槽,如果连接断开成功返回true,否则返回false
bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)

two:断开所有连接到对象的信号
disconnect(myObject, 0, 0, 0);

three:断开所有连接到特定信号
disconnect(myObject, SIGNAL(mySignal()), 0, 0);

four:断开特定接收器
 disconnect(myObject, 0, myReceiver, 0);
QProcess的介绍 只运行一个进程
    QSharedMemory mem("untitled");//以系统exe名称为参数,定义共享内存mem
    if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则弹出提示对话框,并退出
    {
        QMessageBox::information(0,QObject::tr("Warning"),QObject::tr("An instance is running"));
        return 0;
    }
进程开启和关闭
{// 开启进程
    static QProcess newProg;
 
    newProg.start(
    R"(D:UserswydfiScanTest.exe)", // 绝对路径
    QStringList()<<"command");
}
 
{// 关闭进程
    QProcess taskkill;
    taskkill.execute("taskkill"
                    , QStringList()
                     <<"-im"
                     < 
QPushButton的介绍 
常用api 
//设置选中
setChecked(true);
QRect
setFixedSize(500,500); // 控件固定大小
QSharedMemory 共享内存 QSharedMemory快速入门
  • 只运行一个软件

#example:
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

//    CommonHelper::setStyle(":/qss/white.qss");//默认一个主题风格
    //QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
//    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
    //QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
    QSharedMemory mem("untitled");//以系统exe名称为参数,定义共享内存mem
    if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则弹出提示对话框,并退出
    {
        QMessageBox::information(0,QObject::tr("Warning"),QObject::tr("An instance is running"));
        return 0;
    }

    MainWindow w;
    w.show();
    return a.exec();
}
QString介绍 快速入门
// 宽字符转QString
fromUtf16()

// 返回从索引开始的n个字符串
mid()

// 替换所有的指定字符串
replace()

// 去除所有的空白字符串
simplified()
    
// 切割字符串
split()

// 转换成整数
toint()
    
// 将小写字母转换成大写字母
toUpper()

// 去除开头结尾的空白字符
trimmed()
详细入门
  • number()

QString::number((long long)QThread::currentThreadId(),16)
arg()
@example:
    - param:数值,2位,16进制,0补全
    arg(1,2,16,QLatin1Char('0'))
    QString("%1").arg(1,4,10,QLatin1Char('0'));
fromUtf16()
@example:
    LPCWSTR title = L"MFCApplication_MyTool";
    QString strQ = "";
    strQ.fromUtf16(reinterpret_cast(title));
mid()
- brief:`返回一个字符串,该字符串包含该字符串的n个字符,从指定的位置索引开始。`
- params:int position, int n = -1
- retVal:`QString`
replace(QString("a") ,QString("b") ) -> QString
- brief:`返回QString,将"a"替换为"b",
- param1: 替换的字符串
- param2: 被替换的字符串
- retVal:`QString`
simplified()
 - brief: 返回字符串开头和结尾除去空白的字符串,并且内部的空白字符也去掉,比如't','n','v','f','r'和' ';
split()
 - brief: 切割字符串
 - param1: 按照该字符串切割 
 - retVal:QStringList
toint()
- brief:`返回使用base base转换为int的字符串,该值默认为10,必须在2到36或0之间。如果转换失败,返回O。`
- param:`bool *ok=nullptr, 
- param: int base=10`  `按照10进制处理数据` 
- retVal:`int`
例子"1a"  返回:1
QString dataStrQ = "1a";
int dataInt = dataStrQ.toint(nullptr,10)// dataInt = 1
,   dataInt_16 = dataStrQ.toint(nullptr,16)// dataInt = 26
;
toUpper()
- brief:`将小写字母转换为大写字母`
- retVal:QString
trimmed() const
 - brief 返回值为去除了开头和结尾的空白字符串,这里的空白指QChar::isSpace()返回值为true,比如't','n','v','f','r'和' ';
QTcp相关介绍
  • QTcpServer-博客链接

QTextCodec QTextCodec::setCodecForLocale()
    //设置程序编码格式为utf-8
//    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

编码问题
// 3、源文件中指定编码(比较麻烦) 
// 每个源文件开始位置 添加 (头文件有中文,同源文件一样处理) 
// 指定utf-8编码
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
  • 未测试接口

//    CommonHelper::setStyle(":/qss/white.qss");//默认一个主题风格
    //QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
//    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
    //QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QThread 介绍 QThread快速入门
// 获取线程id
currentThreadId();  ->Static Func

// 声明变量类型
qRegisterMetaType("ST_PARAMINFO");

example 普通线程,可能不能给槽函数反应时间

class CThread:public QThread
{
    Q_OBJECT
public:
    CThread(){}

    void SetThread(){this->start();}
protected:
    virtual void run(){

        while(1){

        }

        quit();
    }
};

example QObject::moveToThread(QThread *)
@brief QObject::moveToThread(QThread *)的应用
       解决"普通线程无法等待槽函数问题"
    
class IEventThread:public QObject
{
    Q_OBJECT
public:


    IEventThread(){
        moveToThread(&_thread);
        _thread.start();
    }
    virtual ~IEventThread(){
        _thread.quit();
        _thread.wait();
        qDebug() << __FUNCTION__;
    }


    void connect(){
         QObject::connect(this,SIGNAL(sigObject()),this,SLOT(slot()));
    }

    void emitsig(){

        emit sigObject();
    }

signals:

    // 测试的信号
    void sigObject();
public slots:

    // 测试的槽函数
    void slot(){

        qDebug()<<"thread id :"< 

QThread::currentThreadId() -> Qt::HANDLE
@brief: 返回线程id
QThread::euit()
@brief: 安全退出函数,正确使用才安全
QTime
@exmample:
    //获取时间秒数
    qint64 startSec = QDateTime::currentDateTime().toTime_t();

    LogNStr(获取时间秒数,startSec);

    QDateTime current_date_time = QDateTime::currentDateTime();

    //获取当前时间
    QString current_time = current_date_time.toString("hh:mm:ss.zzz");
    LogNStr(获取当前时间,current_time);

    //int QTime::msec () const
    //Returns the millisecond part (0 to 999) of the time.
//    LogNStr(获取当前时间,QTime::msec());

    //获取时间毫秒值
    //方法1
    QTime t;
    t.start();
    int msec = t.msec();
    LogNStr(获取当前时间毫秒值,msec);

    //方法2
    qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch(); //毫秒级
    LogNStr(获取总时间毫秒值,timestamp);
QTimer
  • QTimer-blog两种使用方法

QObject::moveToThread(QThread *)
@brief:QObject的成员函数,该函数的槽函数,由子线程调用

QThread::quit()
@brief: 安全退出函数,正确使用才安全

QVector
  • 增删改(没查)

//删除元素

QVector> data;

1. 从vector中移除i对应的元素

data.erase(data.begin() + i);

2. 从vector中移除从 i开始的n个元素  

data.remove(data.begin() + i, n);

3. 删除vector中最后一个元素

data.pop_back()  

4. 删除vector中第一个元素

data.pop_front()  

//插入元素

void insert(int i, const T &value)  //将元素插入到i位置,i从0开始计算

void append(const T &value) //将元素插入到vector的末尾

void prepend(const T &value) //将元素插入到vector的开始 

 

//改变元素的值

void replace(int i, const T &value) //改变i位置元素的值
QWidget的介绍 QWidget快速入门
// QObject对象(或子类)的名称
objectName();
​
// QObject对象(或子类)的类型名称
metaObject()->className();
​
// 事件循环函数`虚函数`
nativeEvent() 
​
// 设置窗口置顶
setWindowFlags(Qt::WindowStaysOnTopHint);
​

setWindowTitle("文本浏览器");
​
//屏幕的大小:主窗口的this,
screen()->availableGeometry();
​
// 是否在继承中,
inherits(const char *):
窗口置顶
  • setWindowFlags()

@example
 setWindowFlags(Qt::WindowStaysOnTopHint);
活跃窗口
QApplication::activeWindow();
窗口透明
​
事件循环
  • nativeEvent(const QByteArray &eventType, void *message, long *result) -bool

bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    MSG* msg = (MSG*)message;
    switch(msg->message)
    {
    case WM_COPYDATA:
    {
        // 解析COPYDATASTRUCT
        COPYDATASTRUCT *pCDS = reinterpret_cast(msg->lParam);
//        const wchar_t* pWch = reinterpret_cast(pCDS->lpData);
//        const unsigned long &wch_size = pCDS->cbData
//        , dwData = pCDS->dwData;
​
        // GetProcessId
        DWORD dwPid = 0;
        GetWindowThreadProcessId((HWND)msg->wParam,&dwPid);
​
        QString text = QString("PID=[%1]的进程发来的消息为:%2").arg((int)dwPid)
                .arg(QString::fromUtf16(reinterpret_cast(pCDS->lpData)));
​
        qDebug() << text.toStdString().c_str();
    }
        break;
    }
​
    //其他交给qt处理
    return false;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号