今日看点:
1. 建立工程
2. 采用纯代码写
3. 尝试使用SVG格式资源文件
4. 关联鼠标右键以及菜单
5. 获取屏幕分辨率
6. 给我们的程序加上图标
7. 全屏显示
8. 菜单建立
9. 菜单美化
建立工程,这里就不详细介绍了,
点击完成就可以了,到这里,已经走到了今日看点2了。下面我们就是开始真的开始写代码了,好紧张啊,不知道能不能实现了呀啊呀呀啊呀呀。
首先了,自己准备一个ico文件,作为我们程序的图标
先看看pro文件,因为后面我们会用到网络和SVG的内容,所以我们在PRO文件中加入了相应模块
QT += core gui network svg
这样我们就可以放心的使用网路和SVG的相关功能了。
这里顺便把第六个看点也写了,给我们的程序加上图标
在pro文件中加入以下代码(注意,这里需要较高的版本支持)
RC_ICONS = ./Images/MainWindow/LOGO/LOGO.ico
下面来解决第三个看点,使用SVG资源,SVG资源自己准备,可以用AI直接将图片转换为SVG格式。
关于QT如何使用SVG的详细说明,可以看这里或者自己百度下下,这里只列出了适合我用的
https://jingyan.baidu.com/article/e9fb46e1402b4a7520f76659.html
需要包含四个文件
#include <QSvgRenderer> #include <QPaintEvent> #include <QString> #include <QPainter>
目前我用到的功能仅仅是绘制主窗口的背景,所以,这里需要重载一个函数
/* * Jianwang.Zhang 190527 * 窗口重绘事件,目前主要为绘制主窗口背景 * 探索新的方式,采用.svg格式的图片 */ void paintEvent(QPaintEvent *event);
加载和使用SVG的代码就是这个绘制函数中
/* * Jianwang.Zhang 190527 * 窗口重绘事件,目前主要为绘制主窗口背景 * 探索新的方式,采用.svg格式的图片 */ void MainWindow::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QSvgRenderer * mainWindow_BackGround = new QSvgRenderer(this); QString file_MainWindosBackGround = ":/MainWindos/Images/MainWindow/MainBack.svg"; mainWindow_BackGround->load(file_MainWindosBackGround); QPainter painter(this); mainWindow_BackGround->render(&painter); }
connect(this,&MainWindow::customContextMenuRequested,this,&MainWindow::slot_MouseRight_Clicked); //关联鼠标右键槽函数
具体实现内容就是让我们自己定义的菜单显示
/* * Jianwei.Zhang 190527 * 鼠标右键点击事件 */ void MainWindow::slot_MouseRight_Clicked(QPoint pos) { Q_UNUSED(pos) mainWindowMenu->exec(QCursor::pos()); }
这里有涉及到一个内容,就是怎么做一个菜单呢,看这里
//添加鼠标事件 m_Flag_ShowFullScreen == true ? mainWindowMenu->addAction(QIcon(":/MainWindos/Images/MainWindow/MenuIcon/NewWindow.ico"),QString("正常显示"),this,[=](){this->showNormal();this->resize(1366,768);m_Flag_ShowFullScreen = !m_Flag_ShowFullScreen;}) : mainWindowMenu->addAction(QIcon(":/MainWindos/Images/MainWindow/MenuIcon/NewWindow.ico"),QString("全屏显示"),this,[=](){this->showFullScreen();m_Flag_ShowFullScreen = !m_Flag_ShowFullScreen;}); mainWindowMenu->addSeparator(); //添加分隔符 mainWindowMenu->addAction(QIcon(":/MainWindos/Images/MainWindow/MenuIcon/NewWindow.ico"),QString("新建模块"),this,[=](){qDebug() << "调用新建窗口函数";}); mainWindowMenu->addSeparator(); //添加分隔符 mainWindowMenu->addAction(QIcon(":/MainWindos/Images/MainWindow/MenuIcon/Exit.ico"),QString("退出"),this,[=](){this->close();});
给他加上点东西,这里全屏显示和正常显示还有问题的,在后面会修正,现在只是先给菜单加点东西。
加了菜单,就涉及到了给这个菜单的美化,看这里
"QMenu{background:rgb(200, 200, 200,50);}" "QMenu::item{background-color: transparent;color:#FFFFFF;/*margin:0px 8px;padding:8px 32px;*/}" "QMenu::item::selected{background-color:#88888888;}"
美化有三部分,菜单的背景,菜单的每个item和item选中的样子
下一个,全屏显示问题
/* * Jianwei.Zhang 190527 * 全屏显示 * 这里主要是判断一下屏幕分辨率,如果分辨率太小这提示用户会印象显示效果 */ void show_FullScreen(bool isFullScreen);
声明一个全屏显示函数并实现了它
/* * Jianwei.Zhang 190527 * 全屏显示 * 这里主要是判断一下屏幕分辨率,如果分辨率太小这提示用户会印象显示效果 */ void MainWindow::show_FullScreen(bool isFullScreen) { get_ScreenInfoe(m_ScreenWidth,m_ScreenHeight); isFullScreen == true ?(m_ScreenWidth>= 1366 && m_ScreenHeight>= 768) ? this->showFullScreen(): this->resize(1366,768) : this->resize(1366,768); }
这里有涉及到一个获取屏幕分辨率的问题了
看这里
/* * Jianwei.Zhang 190527 * 获取当前屏幕分辨率 */ void get_ScreenInfoe(int &screenWidth,int &screenHeight);
/* * Jianwei.Zhang 190527 * 获取当前屏幕分辨率 */ void MainWindow::get_ScreenInfoe(int &screenWidth, int &screenHeight) { QDesktopWidget *desktopWidget = QApplication::desktop(); QRect screenRect = desktopWidget->screenGeometry(); screenWidth = screenRect.width(); screenHeight = screenRect.height(); }
好了,以上就是今日看点了,下面微信加好友聊天,支付宝加好友偷能量