Qt一些中的可复用模块

使用简述


开发环境:Window10,Qt 5.9.0 ,mingw32

QT初学者,个人积累收集和整理的一些可复用的模块,博文备份,仅供参考,侵删。

同时感谢各位大佬分享的开发经验,愿与君同行,无限成长

可直接复制使用,但任需要理解其中义。


01- 休眠等待sleep()函数

①widge.h 头文件

private slots:
      void sleep(unsigned int msec);//休眠等待时间(单位毫秒)1000毫秒为1秒

②widge.cpp 源文件

//(可模块化复用)休眠等待函数
void widget::sleep(unsigned int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

③widge.cpp 函数调用

sleep(1000);//阻塞进程一秒后响应

注意:多次频繁调用会阻塞进程,导致bug,可往多线程方向考虑优化。


02- 设置窗体渐隐动画 

①widge.h 头文件:

#include <QPropertyAnimation>//渐隐出现和消失动画

private slots:
    void Anin();//动画渐隐出现
    void Anout();

②widge.cpp 源文件:

//渐隐出现开始0到1,渐隐消失1到0
//动画渐隐出现
void widget::Anin()
{
    QPropertyAnimation*an = new QPropertyAnimation(this,"windowOpacity");
    an->setDuration(500);//单位毫秒
    an->setStartValue(0);
    an->setEndValue(1);
    an->start();
}

//动画渐隐退出
void widget::Anout()
{
    QPropertyAnimation*Tan = new QPropertyAnimation(this,"windowOpacity");
    Tan->setDuration(500);//单位毫秒
    Tan->setStartValue(1);
    Tan->setEndValue(0);
    Tan->start();
}

③widge.cpp 函数调用:

Anin();//动画渐隐出现
Anout();//动画渐隐退出

注意:动画透明度出现和退出时的速度曲线可设置,待学习。


03-设置系统托盘 

①widge.h 头文件:

#include <QSystemTrayIcon>//系统托盘
#include <QMenu>//系统托盘的右击按键

private slots:
    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason); //设置系统托盘
    int onExit();//退出调用
private:
    QSystemTrayIcon m_systray; //系统托盘类

②widge.cpp 源文件: 写在构造函数{……}中

//设置系统托盘图标 和 右键托盘退出菜单按键
m_systray.setIcon(QIcon(":/pic/Timeler-logo.ico"));//可直接复制资源路径
m_systray.show();//显示系统托盘

QMenu *menu = new QMenu();
menu->addAction(ui->actionexit);//注意这个ui->actionexit在Design界面中添加并命名
m_systray.setContextMenu(menu);//设置右键菜单

//关联系统托盘事件
connect(&m_systray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
        this,SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason)));
connect(ui->actionExit,SIGNAL(triggered()),qApp,SLOT(onExit()));

③widge.cpp 源文件:

//系统托盘图标双击显示事件
int Widget::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason)
{
    if(reason ==QSystemTrayIcon::Trigger||
        reason==QSystemTrayIcon::DoubleClick)
    {
        //显示主窗口,或者其他
        return 0;
        //this->showNormal();
    }
    return 0;
}
int Widget::onExit()
{
    QApplication::exit(0);
    return 0;
}

  04-设置读取qss样式表  

①widge.h 头文件:

#include <QFile>
#include <QApplication>
//全局公共调用类
class CommonHelper
{
public:
    static void setStyle(const QString &style) {
        QFile qss(style);//style是带双引号的
        qss.open(QFile::ReadOnly);
        qApp->setStyleSheet(qss.readAll());
        qss.close();
    }
};

②widge.cpp 源文件:

CommonHelper::setStyle(":/qss/styleWhite.qss");//注意样式表的有效性

 注意:qss文件需要添加到资源文件中,可以多次在不同的cpp中调用。如无法改变样式表,可能是qss样式表有问题。

开发时,可以先在Design视图中,在widget的样式表中写好全部的样式后复制到qss文件中。 


 05-设置窗体阴影 

①widge.h 头文件:

#include <QGraphicsDropShadowEffect>//窗体阴影

②widge.cpp 源文件:写在构造函数中,或者单独写个函数

//设置窗体背景阴影
//(来至https://blog.csdn.net/qiangzi4646/article/details/89639056)
    this->setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体透明
    this->setWindowFlags(Qt::FramelessWindowHint);//设置无边框
    QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
    shadow->setOffset(0, 0);//设置阴影距离
    shadow->setColor(QColor("#444444"));//设置阴影颜色
    shadow->setBlurRadius(30);//设置阴影圆角
    ui->MyFrame->setGraphicsEffect(shadow); //给嵌套QWidget设置阴影
    ui->showa_bg->setMargin(15);//设置边距(此步很重要, 设置宽度为阴影的宽度)

 注意:设计窗体阴影时,需要主窗体包含一个layout布局器。而后layout再嵌套一个widget,控件的布局设置于widget中,再对layout布局布局器设置阴影边距。 


待更新…… 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt ,你可以使用 IO 多路复用技术来处理多个 IO 事件,以提高应用程序的性能和效率。Qt 提供了一个名为 QSocketNotifier 的类,它可以用于将底层操作系统的文件描述符(如套接字)与 Qt 的事件循环系统连接起来。 使用 IO 多路复用的一种常见方式是使用 Qt 的 QEventLoop 类。你可以在事件循环监听多个套接字的读写状态,并在事件发生时触发相应的槽函数进行处理。 以下是一个示例代码: ```cpp #include <QtNetwork/QTcpServer> #include <QtNetwork/QTcpSocket> #include <QtCore/QObject> #include <QtCore/QCoreApplication> class MyServer : public QObject { Q_OBJECT public: explicit MyServer(QObject *parent = nullptr) : QObject(parent) { server = new QTcpServer(this); connect(server, &QTcpServer::newConnection, this, &MyServer::handleNewConnection); server->listen(QHostAddress::Any, 1234); } private slots: void handleNewConnection() { QTcpSocket *clientSocket = server->nextPendingConnection(); connect(clientSocket, &QTcpSocket::readyRead, this, &MyServer::handleReadyRead); } void handleReadyRead() { QTcpSocket *clientSocket = qobject_cast<QTcpSocket*>(sender()); if (clientSocket) { QByteArray data = clientSocket->readAll(); // 处理读取到的数据 qDebug() << "Received data: " << data; } } private: QTcpServer *server; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); MyServer server; return a.exec(); } ``` 在上面的示例,我们创建了一个简单的 TCP 服务器,监听端口 1234。每当有新的连接到达时,我们将为新的客户端套接字连接 readyRead 信号的处理函数。在处理函数,我们读取客户端发送的数据并进行处理。 这样,我们就实现了通过 IO 多路复用来同时监听多个套接字的读写事件的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值