Qt--小项目:定时器的运用

主界面

系统托盘图标

单例运行

exe带图标

   

1、QLockFile实现单程序运行 

1.1、main.cpp

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

    QString path = QDir::temp().absoluteFilePath("SingleAppTest.lock");
    QLockFile lockFile(path);
    if (!lockFile.tryLock(100))
    {
        QMessageBox msgBox;
        msgBox.setIcon(QMessageBox::Warning);
        msgBox.setText("已有程序在运行。");
        msgBox.exec();
        return 1;
    }

    Widget w;
    w.show();
    a.exec();
    return 0;
}

1.2、源文件widget.cpp

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{


    ....
    

    QSystemTrayIcon *tray = new QSystemTrayIcon(this);
    QIcon icon("./pencil.png");
    tray->setIcon(icon);
    this->setWindowIcon(icon);

    ......


    QMenu *menu = new QMenu(this);
    QAction *action_exit = new QAction("退出",this);

    //菜单项被触发信号槽
    connect(action_exit,&QAction::triggered,this,&Widget::onActionExit);

    menu->addAction(action_exit);
    tray->setContextMenu(menu);

    //托盘激活信号槽
    connect(tray,&QSystemTrayIcon::activated,this,&Widget::onTrayActived);
 
}


void Widget::onActionExit(bool /*checked*/)
{
    onCloseExit = true;
    close();
}

//自定义QWidget 使用样式表,需要重写paintEvent
void Widget::paintEvent(QPaintEvent */*event*/)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}



void Widget::onTrayActived(QSystemTrayIcon::ActivationReason reason)
{
    if(reason == QSystemTrayIcon::DoubleClick){
        if(isVisible() && isMinimized()){
            setWindowState(windowState()^ Qt::WindowMinimized);
            show();
            return;
        }
        if(isHidden()){
            show();
        }else{
            hide();
        }
    }
}

2、exe带图标

2.1、qt项目文件

#exe程序带图标,需要提供资源文件*.rc
RC_FILE += app.rc

2.2、RC文件内容app.rc

IDI_ICON1 ICON DISCARDABLE "favicon.ico"

3、Qt5 exe带图标

今天看到了 Qt5设置应用程序图标和发布程序 博客的文章,了解另外一种更加快捷的方法

在.pro项目文件中添加一行代码:RC_ICONS = myico.ico  //这里myico.ico就是图标文件的名字

不过必须是ico文件,png格式不行。

用QWidget::grab()抓一块区域,再用QPixmap.save()方法生成ico文件

# QPixmap QWidget::grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))
QPixmap pic = grab(geometry());
//pic.save("timetable.png");
//    pic.save("timetable.jpg");
pic.save("timetable.ico");

源代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值