这几天初步接触了Qt,首先在学习Qt的UI界面的设计,发现Qt里面自带的那些控件与窗体显示效果都不太好,于是上网看了一些教程,也参考了一个demo界面,然后初步设计了一个ui界面。

大概的设计思路是先去掉MainWindow里的边框、菜单栏以及标题栏,自己制作需要的菜单栏以及标题栏。

(重载其中的窗体绘制事件paintEvent、鼠标移动事件mouseMoveEvent、鼠标按下事件mousePressEvent)

以下为代码


//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H//Qt常用类
#include <QtCore>
#include <QtGui>#include <QMainWindow>
#include <QMenu>
#include <QPushButton>
#include <animationbutton.h>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();protected://重载窗体绘制函数void paintEvent(QPaintEvent *);//移动窗体鼠标距离void mouseMoveEvent(QMouseEvent *);//获得鼠标拖动窗体移动距离void mousePressEvent(QMouseEvent *);private slots:void on_menu_btn_clicked();private:Ui::MainWindow *ui;QPixmap m_pixmapBg;QAction *m_ActionAboutQt;QMenu *m_menu;QPoint m_pointStart;QPoint m_pointPress;//初始化界面void initStyle();//设置初始界面void setNormalStyle();//设置按钮对应界面void setCurrentWidget();//设置菜单void setMenu();//设置按钮void setButton();
};#endif // MAINWINDOW_H

其中动画按钮类animationbutton为自定义的一个继承自QWidget类的派生类,在下一篇文章。

//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);initStyle();
}MainWindow::~MainWindow()
{delete ui;
}/** writer:sym* date:2019-8-17* */
void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);//.rect()获取图片参数(长宽)painter.drawPixmap(m_pixmapBg.rect(),m_pixmapBg);
}void MainWindow::mouseMoveEvent(QMouseEvent *e)
{this->move(e->globalPos()-m_pointStart);
}void MainWindow::mousePressEvent(QMouseEvent *e)
{//获取鼠标事件相对桌面位置m_pointPress=e->globalPos();m_pointStart=m_pointPress-this->pos();
}/** writer:sym* date:2019-8-17* */
void MainWindow::setNormalStyle()
{QFile styleSheet(":/qss/sty_demo.qss");if (!styleSheet.open(QIODevice::ReadOnly)){qWarning("Can't open the style sheet file!");return;}qApp->setStyleSheet(styleSheet.readAll());
}/** writer:sym* date:2019-8-17* */
void MainWindow::setMenu()
{m_menu=new QMenu();m_menu->addAction(tr("使用说明"));m_menu->addAction(tr("关于"));m_menu->addSeparator();m_menu->addAction(tr("About CSU"));m_ActionAboutQt=new QAction(tr("&About Qt"),this);connect(m_ActionAboutQt,SIGNAL(triggered()),qApp,SLOT(aboutQt()));m_menu->addAction(m_ActionAboutQt);
}/** writer:sym* date:2019-8-19* */
void MainWindow::setButton()
{ui->autotest_btn->setText(tr("在线检测"));ui->autotest_btn->setImage(":/image/v-home-ico-home.png");ui->mantest_btn->setText(tr("手动检测"));ui->mantest_btn->setImage(":/image/v-home-ico-contact.png");ui->parset_btn->setText(tr("参数设置"));ui->parset_btn->setImage(":/image/v-home-ico-record.png");ui->resultshow_btn->setText(tr("查看结果"));ui->resultshow_btn->setImage(":/image/v-home-ico-img.png");ui->autotest_btn->setStackedWidgets(ui->stackedWidget,0);ui->mantest_btn->setStackedWidgets(ui->stackedWidget,1);ui->parset_btn->setStackedWidgets(ui->stackedWidget,2);ui->resultshow_btn->setStackedWidgets(ui->stackedWidget,3);
}void MainWindow::initStyle()
{//去掉标题栏setWindowFlag(Qt::FramelessWindowHint);//设置背景为透明模式setAttribute(Qt::WA_TranslucentBackground);m_pixmapBg.load(":/image/frame.png");ui->label_checkUpdate->setText(tr("<a href=http://soa.csu.edu.cn>""<font color=white>中南大学自动化学院</font></a>"));ui->label_checkUpdate->setOpenExternalLinks(true);setMenu();setNormalStyle();setButton();
}void MainWindow::on_menu_btn_clicked()
{//设置菜单栏出现位置m_menu->exec(this->mapToGlobal(QPoint(700, 20)));
}

值得注意的是Qt也有他自己的css,即qss。所谓qss,即Qt样式表的思想很大程度上是来自于HTML的层叠式样式表(CSS), 通过调用QWidget::setStyleSheet()或QApplication::setStyleSheet(), 你可以为一个独立的子部件、整个窗口,甚至是整个个应用程序指定一个样式表。

/*
Writer:sym
FileName:sty_demo.qss
Date:2019-8-17
*//*menu_btn*/
QPushButton#menu_btn
{background-image:url(:/image/cai.png);border:0px;
}
QPushButton#menu_btn:hover
{background-image:url(:/image/cai2.png);border:0px;
}
QPushButton#menu_btn:checked
{background-image:url(:/image/cai2.png);border:0px;
}/*min_btn*/
QPushButton#min_btn
{background-image:url(:/image/min.png);border:0px;
}
QPushButton#min_btn:hover
{background-image:url(:/image/min2.png);border:0px;
}
QPushButton#min_btn:checked
{background-image:url(:/image/min2.png);border:0px;
}/*normal_btn*/
QPushButton#normal_btn
{background-image:url(:/image/max.png);border:0px;
}
QPushButton#normal_btn:hover
{background-image:url(:/image/max2.png);border:0px;
}
QPushButton#normal_btn:checked
{background-image:url(:/image/max2.png);border:0px;
}/*close_btn*/
QPushButton#close_btn
{background-image:url(:/image/close.png);border:0px;
}
QPushButton#close_btn:hover
{background-image:url(:/image/close2.png);border:0px;
}
QPushButton#close_btn:checked
{background-image:url(:/image/close2.png);border:0px;
}/*logo*/
QLabel#logo
{border-image:url(:/image/csu_logo.png);border:0px;
}

Qt学习(一)ui界面的设计相关推荐

  1. unity之游戏UI界面框架设计实战学习(一)

    游戏UI界面框架设计实战精讲视频课程 配合上博客 刘老师讲Unity 刚开始接触UI界面. 觉得讲得非常好. 做一下笔记. 课程总体分为七大部分: 一: UI框架设计理念 整体简单介绍即将带领大家开发 ...

  2. ui界面颜色设计_界面设计ui的颜色基础

    ui界面颜色设计 重点 (Top highlight) Color is a sensory impression that the eyes perceive from the light, tra ...

  3. 视频教程-游戏UI界面框架设计系列视频课程-Unity3D

    游戏UI界面框架设计系列视频课程 二十多年的软件开发与教学经验IT技术布道者,资深软件工程师.具备深厚编程语言经验,在国内上市企业做项目经理.研发经理,熟悉企业大型软件运作管理过程.软件架构设计理论. ...

  4. 如何使用深度学习识别 UI 界面组件?

    导读:智能生成代码平台 imgcook 以 Sketch.PSD.静态图片等形式的视觉稿作为输入,可以一键生成可维护的前端代码,但从设计稿中获取的都是 div.img.span 等元件,而前端大多是组 ...

  5. Node-Red UI界面基础设计

    Node-Red UI界面基础设计 1.UI界面介绍 2.dashborad标签 (1)Layout (2)Site (3)Theme 1.UI界面介绍 UI的布局依赖于节点中Tab和Group属性. ...

  6. QT多个ui界面设计

    这里以2个ui界面为例 新建一个设计 关联ui 背景设计 新建一个设计 在已有一个项目和ui的时候,右键Forms,在出来的的菜单中,点击Add New,弹出的界面选择Qt Designer From ...

  7. C++ Qt学习笔记 (1) 简易计算器设计

    最近开始学习c++ qt, 按照教材上的例程设计一个简易的桌面计算器: Qt是一个基于C++语言的跨平台应用程序和UI开发框架,主要包含一个类库,和跨平台开发及国际化的工具,最初由挪威的Trollte ...

  8. qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库

    提要 此文分别就qt生成纯代码的动态库,含有ui文件的动态库以及含有资源文件qss文件和切图的动态库. 实现 1.纯代码的生成qt库.即没有ui文件的项目. 打开QtCreate,新建文件,选择lib ...

  9. Unity UI界面的设计(完整版)

    目录 一.初始界面 开始 关于 切换操作方式 菜单界面完整代码 二.游戏界面 帮助 重新开始游戏 音乐的开关 退出游戏 返回菜单 调节音量 游戏界面完整代码 一.初始界面 点击"关于&quo ...

  10. 安卓开发Java版——UI界面的设计

    UI界面设计 常见控件使用方法 TextView android:background 背景颜色 android:layout_width和android:layout_height指定了控件的宽度和 ...

最新文章

  1. 【MySQL】简单命令总结
  2. python基础语法手册format-Python-输出格式化format()方法的基本使用(2)
  3. 理论上每天有8.5到11.5小时的学习时间,可是为什么只有最多4小时是有效的?如何改善?...
  4. 单例设计模式-反射攻击解决方案及原理分析
  5. c语言for要分号错误,c语言for语句
  6. What Are You Talking About HDU1075
  7. 21-win10下ElasticSearch.6.1.0安装SQL插件
  8. 超视频化到来,你能看到什么?
  9. 2021-02-02 天地图图层类型
  10. 基于Android P,自定义Android开机动画的方法
  11. C语言—随机种子的设定
  12. 如何在Web前端实现CAD图文字全文搜索功能之技术分享
  13. 从百度“童年英雄的AI幻想”互动展说起,看AI如何赋能艺术?
  14. HTML+CSS一篇文章搞定
  15. 用python打印学生名单_Python 之 MySql 每日一练 231——查询1990年出生的学生名单...
  16. 谷歌地图 图片保存_Google如何在地图上跟踪并保存您的一举一动
  17. Java基础学习第十天(抽象类、值交换)
  18. gitlab添加邮箱设置
  19. 系统消息的发送和接收
  20. “雾计算” 是什么?会不会在2018年迎来爆发?

热门文章

  1. 一、MySQL整体架构
  2. 深度时空3D卷积神经网络用于交通预测(文末附数据链接)
  3. 电脑重装系统后usbcleaner怎么格式化u盘
  4. java 大富翁 游戏下载_大富翁4-大宇正版
  5. dump文件导入表修复工具——Imports Fixer
  6. 四维图新地图坐标_四维图新:自动驾驶的“高精度地图世界观”
  7. mssql2000sp4 sql injection
  8. 阿里云搭建 ftp 服务器
  9. HTML网页设计结课作业~仿小米商城网站纯HTML模板源码(HTML+CSS)
  10. 08cms cecore.cls.php,08CMS 变量覆盖导致getshell 等问题