光实现弹幕还不够哦~桌面客户端也要做好看点才比较好用~
接下来就跟随 杰洛君 一起实现一个QMainwindow 程序吧~
拖控件与代码实现之间的比较
QMainWindow程序界面的编写在Qt中主要有三种方式:
- 1.拖动控件
- 2.代码实现
- 3.以上二者混合
拖动控件进行界面编写
双击项目中的 mainwindow.ui 就会打开设计模块,左边看到的Layouts,Button等就是控件,你可以拖动进中间的窗体。
右边有一颗控件树,由此我们可以知道,控件以树状结构进行管理。
以上就是拖控件来进行界面编写啦~
控件都在UI 命名空间中,所以你可以看到我们Mainwindow的实现代码总有这么一句
ui->setupUi(this);
访问控件都是用ui进行访问。
不过呢,杰洛君的这个应用还是非常传统地用代码实现了,没有用到控件,主要是杰洛君比较笨,没有学会用好这个设计软件TAT
(p.s. 为了都试着用代码写,所以mainwidnow.ui中的菜单栏,状态栏我全都右键删除了~)
这两种方法各有优势,没有孰优孰劣之说,总之你喜欢就好~
那么,接下来。。。
具体的就以这个为示例,说下如何做一个这样子的程序。
先来一段分析
上面图中的界面如何实现?
观察可以知道,这个应用有很明显分为三个部分:
- 标题栏(黑色部分)
- 图片栏(蓝色部分)
- 控制台(白色部分)
我们简化它 , 发现它的结构如下图般简单~
那就开始一部分一部分地实现吧~
首先是标题栏~
你可以看到杰洛君并没有采用系统的标题栏,所以你在不同系统中看到的标题栏效果是一致的。
小思考
提问:自定义标题栏的优点和缺点各有那些呢?回答:
自定义标题栏优点:
1. 可以让界面画风一致,因为有时你的程序风格与系统原生界面是不一致的,自定义标题栏比较好看,防止画风突变(^__^)~
2.不同平台下标题栏风格是一致的~自定义标题栏缺点:
1.放弃了系统原生的标题栏意味着,放弃了系统原生实现好的那些拖放功能,最大化最小化,拉伸的功能等。也就是说这些功能都是需要自己实现的。
既然放弃了很多系统原生功能,为了简化,那就那把应用的大小设置为固定的吧~这样可以专注学习布局,不用去实现拉伸,大大降低难度~
实现一个自定义标题栏吧
就如上面所说的,先固定窗体大小,剩下的就好办了。
设置窗体固定大小很简单 在mainwindow的构造函数中
this->setFixedSize(900,600);
固定为宽为900,高为600的一个窗体。
然后杰洛君创建一个新的类,TitleWidget 它集成自QWidget,并且重载它的paintEvent 函数。
把这个类作为我们的标题栏~
于是它至少应该是这个样子:
class TitleWidget : public QWidget
{
Q_OBJECT
public:
explicit TitleWidget(QWidget *parent = 0);
signals:
public slots:
protected:
void paintEvent(QPaintEvent *);
};
为了让窗体的背景有一个渐变的效果,这里我们重载paintEvent
void TitleWidget::paintEvent(QPaintEvent *){
// 设置画笔
QPen objPen(Qt::NoBrush,1);
QPainter Painter(this);
Painter.setPen(objPen);
//设置渐变画刷
QLinearGra