qt-常用代码

目录

1.获取时间差

2.注册signal和slot数据类型

3.用数组和stl的时候一定要判断是否为空,即使显得很啰嗦。

4.读文件

5.写文件

6.设置样式的伸展度

7.设置窗口的属性

8.QString转QJsonObject

9.Combox添加代理,使QSS生效

10.QLabel中图片自适用

11.ListWidget选中去掉边框

12.绑定按钮

13.LIBS+= 

14.文件另存为

15qss 设置属性

16打开百度并搜索

17激活窗口调用处用,showEvent里没用

18.json解析中文字符

19.方形图片转圆形

20.图片转data,data转图片

21 QEventloop超时检测

22. 智能指针 QScopedPointer


1.获取时间差

QTime startTime = QTime::currentTime();
QTime endTime   = QTime::currentTime();
int nElspsed    = m_rButtontime.msecsTo(endTime);

2.注册signal和slot数据类型

qRegisterMetaType<QList<QString>>("QList<QString>");

3.用数组和stl的时候一定要判断是否为空,即使显得很啰嗦。

if(!list.isEmpty()){
    //statement
}

4.读文件

    QFile file("mibox.bnf");

	if (!file.open(QIODevice::ReadOnly))
	{
		qDebug() << QStringLiteral("读取文件失败");
	}
	//将每一行读取
	while (!file.atEnd())
	{
		QTextCodec *codec = QTextCodec::codecForName("GBK");
		QString line = codec->toUnicode(file.readLine());
	}
	file.close();

5.写文件

    QFile writefile("mibox.bnf");
    QStringList list;
	if (writefile.open(QIODevice::WriteOnly))
	{
		QTextStream wrtstream(&writefile);
		for (auto strLine : list)
		{
			QTextCodec *codec = QTextCodec::codecForName("GBK");
			wrtstream << codec->toUnicode(strLine.toLocal8Bit());
		}
	}
	writefile.close();

6.设置样式的伸展度

pWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);

7.设置窗口的属性

setWindowFlags(Qt::FramelessWindowHint);

8.QString转QJsonObject

QJsonObject mitrain::stringToJson(QString &str)
{
    QJsonObject l_ret;
    QJsonParseError l_err;
    QJsonDocument l_doc = QJsonDocument::fromJson(str.toLocal8Bit(), &l_err);
    if (l_err.error == QJsonParseError::NoError)
    {
        if (l_doc.isObject())
        {

            l_ret = l_doc.object();
        }
    }
    return l_ret;
}

9.Combox添加代理,使QSS生效

    QStyledItemDelegate *itemDelegate = new QStyledItemDelegate(this);
    ui->comboBox->setItemDelegate(itemDelegate);

10.QLabel中图片自适用

    QPixmap image(":/other/image/logo_gray.png");      //保持长宽比          //平滑转换
    QPixmap fitpixmap=image.scaled(ui->label->size(), Qt::KeepAspectRatio, 
    Qt::SmoothTransformation);
    ui->label->setAlignment(Qt::AlignCenter);
    ui->label->setPixmap(fitpixmap);

11.ListWidget选中去掉边框

  qsslist.append("*{outline:none;}");
  ui->listWidget->setFocusPolicy(Qt::NoFocus);

12.绑定按钮

先设置按钮可以被选中setCheckable(true);,再在点击时候设置被选中或者不被选中(都要设置)btn->setChecked(true);需要设置qss的QPushButton::checked{};

  QList<QPushButton*>navBtns = ui->wid_right->findChildren<QPushButton*>();
    foreach (QPushButton*btn, navBtns) {
        btn->setCheckable(true);
        btn->setFixedSize(47,50);
        connect(btn,&QPushButton::clicked,this,&Widget::on_btnClick);
    }


//on_btnClick
 QPushButton * btnOrigin = (QPushButton*)sender();
    QList<QPushButton*>pbtns = ui->wid_right->findChildren<QPushButton*>();

    for(int i = 0;i < pbtns.count(); ++i){
        if(pbtns[i] == btnOrigin){
            pbtns[i]->setChecked(true);
            ui->stackedWidget->setCurrentIndex(i);
        }else{
            pbtns[i]->setChecked(false);
        }
    }

13.LIBS+= 

-L 空格 相对路径 -l链接库名字

或者 

相对路径/链接库完整名字

LIBS +=-L $$PWD/../libs/ -lWSCommon_d
LIBS +=$$PWD/../libs/WSCommon_d.dll

14.文件另存为

 QFileDialog fileDialog;
    QString fileName = fileDialog.getSaveFileName(this,tr("Open File"),"/home",tr("Text File(*.txt)"));
    if(fileName == "")
    {
        return;
    }
    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        qDebug()<<"打开文件失败";
        return;
    }
    else
    {
        QTextStream textStream(&file);
        //下面的str是保存的内容
        QStringList txtList;;
        for(int i = 0; i < m_List.count(); ++i){
            txtList.append(m_List[i].second);
        }
        QString str = txtList.join("\n");
        textStream<<str;
        file.close();
    }

15qss 设置属性

//初始化 
 m_lbl->setObjectName("lblText");
 m_lbl->setProperty("TextColor","black");

//qss
 setStyleSheet("#lblText[TextColor=\"red\"]{color:red;}#lblText[TextColor=\"black\"]{color:black;}");


//使用
    m_lbl->style()->unpolish(m_lbl);
    m_lbl->setProperty("TextColor","black");
    m_lbl->style()->polish(m_lbl);
    m_lbl->update();

16打开百度并搜索

    QByteArray url = "https://www.baidu.com/s?ie=utf-8&wd=";
    url+=" 天气";
    QDesktopServices::openUrl(QUrl(url));

17激活窗口调用处用,showEvent里没用

   this->showNormal();
        this->raise();
        this->activateWindow();

18.json解析中文字符

   QTextCodec *codec = QTextCodec::codecForName("utf8");  

   QString all = codec->toUnicode(reply->readAll());

19.方形图片转圆形

QPixmap MiCommonFunc::pixToRound(const QPixmap &srcPixMap, int radius)
{
    if (srcPixMap.isNull()) {
        return srcPixMap;
    }
    QRect size(0,0,radius * 2,radius * 2);
    int imageWidth = radius * 2;
    int imageHeight = radius * 2;
    //处理大尺寸的图片,保证图片显示区域完整
    QPixmap newPixMap = srcPixMap.scaled(imageWidth, (imageHeight == 0 ? imageWidth : imageHeight)
                                         ,Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    QPixmap destImage(imageWidth, imageHeight);
    destImage.fill(Qt::transparent);
    QPainter painter(&destImage);
    painter.setRenderHints(QPainter::Antialiasing, true);
    painter.setRenderHints(QPainter::SmoothPixmapTransform, true);
    QPainterPath path;
    path.addRoundedRect(size, radius, radius);
    painter.setClipPath(path);
    painter.drawPixmap(0, 0, imageWidth, imageHeight, newPixMap);
    return destImage;
}

20.图片转data,data转图片

//数据转Pixmap
 QPixmap tempPixmap ;
 tempPixmap.loadFromData(data);
//Pixmap 转数据
 QByteArray ba;
 QBuffer buffer(&ba);
 buffer.open(QIODevice::WriteOnly);
 img.save(&buffer, "PNG");
 return ba;

21 QEventloop超时检测

    QEventLoop loop;
    int nElec = 0;
    QTimer timer;
    timer.setSingleShot(true);
    timer.setInterval(10000);
    QObject::connect(&timer,&QTimer::timeout,&loop,&QEventLoop::quit);
    QObject::connect(device,&HidDevice::sig_electiric,&loop,
                     [&loop,&nElec,&timer](const int& value)
    {
        if(timer.isActive())
            timer.stop();
        nElec = value;
        loop.quit();
    });
    device->getDeviceInfo();
    timer.start();
    loop.exec();
    return nElec;

22. 智能指针 QScopedPointer

出了作用域,自动析构

QScopedPointer<ExportDlg>exportDlg(new ExportDlg);

Guess you like

Origin blog.csdn.net/yonggandess/article/details/107905001