【Qt】常用基础代码汇总(随时更新)

1、show() 与 exec()

show显示的是非模态对话框;exec显示的是模态对话框。

2、设置无边框窗口

this->setWindowFlags(Qt::FramelessWindowHint);      //设置为无边框窗口

3、设置窗体透明

this->setAttribute(Qt::WA_TranslucentBackground);   //设置窗体透明

4、Qt字符串转换

#ifdef UNICODE
 
#define QStringToTCHAR(x)     (wchar_t*) x.utf16()
#define PQStringToTCHAR(x)    (wchar_t*) x->utf16()
#define TCHARToQString(x)     QString::fromUtf16((x))
#define TCHARToQStringN(x,y)  QString::fromUtf16((x),(y))
 
#else
 
#define QStringToTCHAR(x)     x.local8Bit().constData()
#define PQStringToTCHAR(x)    x->local8Bit().constData()
#define TCHARToQString(x)     QString::fromLocal8Bit((x))
#define TCHARToQStringN(x,y)  QString::fromLocal8Bit((x),(y))
 
#endif

5、Qss读取

void Widget::InitStyle(int i)
{
    m_LCD_Hour->setStyleSheet(" font: 18px black;");
    if(i != 0)
    {
        QFile file(QString(":/Assert/qss/style%1.qss").arg(i));
        file.open(QFile::ReadOnly);
        this->setStyleSheet(file.readAll());
        file.close();
        return;
    }

    // m_LCD_Min->setStyleSheet("color: black; ");
    // m_LCD_Sec->setStyleSheet("color: black; ");

    QFile file(QString(":/Assert/qss/main.qss"));
    file.open(QFile::ReadOnly);
    this->setStyleSheet(file.readAll());
    file.close();

}

6、QWidget自动列宽

	// TreeWidget 自动列宽 add by mingming.shi 2021-10-23
	ui.treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);

7、Qss写法参考

QSS单独设置某控件样式

8、Qt正则表达式

    QRegExp rx("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");  //IP的正则表达式
    if(!rx.exactMatch(m_lineEdit->text()))
    {
        QMessageBox::critical(this, tr("Error"),
                              tr("IP WRONG.\n"
                                 "Please Make Sure Input Correct IP!"),
                              QMessageBox::Ok);
        return ;
    }

    if(m_lineEdit->text().toInt() <= 0)
    {
        QMessageBox::information(this, tr("Info"),
                              tr("IP Correct.\n"
                                 "Input Correct IP is Saved!"),
                              QMessageBox::Ok);
        return;
    }

9、字体相关

  • 查询系统支持的字体
QFontDatabase database;
foreach (const QString &family, database.families()) {
    qDebug()<<family;
}
  • 设置全局字体
    font内容为family查询到的字体名称
QFont font("family");
QApplication::setFont(font);
  • 外部加载字体
    • 字体支持ttc或ttf格式加载;
    • 使用addApplicationFont可以为系统路径,也可以资源文件。
int fontId = QFontDatabase::addApplicationFont("font.ttc");
QStringList fontIDs = QFontDatabase::applicationFontFamilies(fontId);
if (! fontIDs.isEmpty()) {
    QFont font(fontIDs.first());
    QApplication::setFont(font);
}
else {
    qDebug()<<"Failed to load font.";
}

10. Qt锁

  QMutex mutex;
  int number = 6;

  void method1()
  {
      mutex.lock();
      number *= 5;
      number /= 4;
      mutex.unlock();
  }

  void method2()
  {
      mutex.lock();
      number *= 3;
      number /= 2;
      mutex.unlock();
  }

11、 计时器 定时器

计时器

QTimer *timer = new QTimer;
connect(timer, SIGNAL(timeout()), this, SLOT(slotTimeOut()));
// 或者
connect(timer, &QTimer::timeout, this, [=]()mutable{
   slotTimeOut();
});


timer->start(1000);

单次定时器

	// 3秒后 启用下载按钮
	QTimer::singleShot(3 * 1000, this, [=]() {
		ui->pushBtnUpgrade->setDisabled(false);
		});

12、乱码问题

在头文件添加以下代码即可。

#if defined(_MSC_VER) && (_MSC_VER >= 1600)
	#pragma execution_character_set("utf-8")
#endif

13、 QTextBrower 设置字体颜色

#define TEXT_COLOR_RED(STRING)         "<font color=red>" + STRING + "</font>" "<font color=black> </font>"
#define TEXT_COLOR_BLUE(STRING)        "<font color=blue>" + STRING + "</font>" "<font color=black> </font>"
#define TEXT_COLOR_GREEN(STRING)        "<font color=green>" + STRING + "</font>" "<font color=black> </font>"

ui->textBrowser->setText(TEXT_COLOR_BLUE(content));

14 Qt http下载网络中断问题

使用 QNetworkAccessManager 下载文件时,网络中断返回的异常吗仍然是200,需要判断 slotFinished 函数中需要判断 error 的状态来判断下载是否正常

void QHttpDownloadObject::Init()
{
    QNetworkAccessManager *m_pManager = new QNetworkAccessManager(this);
    m_pOnlinemanager = new QNetworkConfigurationManager(this);

    // ("ftp", "file", "qrc", "http", "https", "data")
    qDebug() << m_pManager->supportedSchemes();
    m_pManager->setNetworkAccessible(QNetworkAccessManager::Accessible);

    QNetworkConfigurationManager manager;
    m_pManager->setConfiguration(manager.defaultConfiguration());

	connect(m_pManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotRequestFinished(QNetworkReply*)));
}

void QHttpDownloadObject::PerformRequest(QString strUrl)
{
    QNetworkRequest request;

    request.setUrl(QUrl(strUrl));

    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");


    m_fileTmp.setFileName(m_DestFilePath);
    m_fileTmp.open(QIODevice::Append);

    m_pReply = m_pManager->get(request);   // get 方式

    connect(m_pReply, &QNetworkReply::readyRead,        this, &QHttpDownloadObject::onReadyRead);
    connect(m_pReply, &QNetworkReply::downloadProgress, this, &QHttpDownloadObject::downloadProgress);
    // 使用当前接口判断下载时否异常
	connect(m_pReply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), this, &QHttpDownloadObject::onError);

}

void QHttpDownloadObject::slotRequestFinished(QNetworkReply *reply)
{
    disconnect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64)));

    if (m_fileTmp.isOpen())
    {
        m_fileTmp.close();
    }

    // 获取响应的信息,状态码为200表示正常
	QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    QString strError = reply->errorString();
    QNetworkReply::NetworkError error = reply->error();

    qDebug() << "+++++++++" << statusCode << strError << error; // QVariant(int, 200) "Connection closed" QNetworkReply::NetworkError(RemoteHostClosedError)

	if (statusCode.toInt() >= 400 || error != QNetworkReply::NoError) 
    {
		QLOG_INFO() << "无法下载文件,错误状态码:" << statusCode << "错误信息:" << strError << error;
		emit sigDownloadFinished(DOWNLOAD_CODE_NETBAD, QString(ERRORTITLE_APPACCESS_NETFAULT).arg(strError));
	}
    else
    {
        emit sigDownloadFinished(statusCode.toInt(), strError);
    }
    
    reply->close();
    reply->deleteLater();
    m_pManager->deleteLater();
    m_pOnlinemanager->deleteLater();
}

15 管理员运行程序

  1. 管理员运行程序,限定在MSVC编译器,在项目pro文件中增加如下代码。
QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' uiAccess='false'" #以管理员运行
QMAKE_LFLAGS += /SUBSYSTEM:WINDOWS,"5.01" #VS2013 在XP运行

16 QLabel 点击事件

重写 QLabel 事件

void QCycleProgress::mousePressEvent(QMouseEvent* event)
{
	emit clicked();

	QLabel::mousePressEvent(event);
}
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

欧恩意

如有帮助,感谢打赏!

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

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

打赏作者

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

抵扣说明:

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

余额充值