我们在VisualStudio中例如VC或者C#中写一些个性化比较强的项目都会对控件有更高的要求,那么当我们的要求得不到满足时就需要考虑用到自定义控件了,其中自定义控件有两种方式,一种是完全重写,另一种简单的方法是继承自现有的控件。
这里我们说控件提升就是QT中采用继承自现有控件类的一种自定义控件,只不过这里的提升比VS中的自定义控件来得更加容易。简单两步即可完成!
一、新建控件
1、新建一个提升
我们可以在设计器中拖放任何控件,这里我们以textedit控件为例。
点击提升即可,打开一个命名窗口,输入好名称后点击“添加”按钮
接下来,我们就要为提升的控件,准备对应的代码文件和头文件了。点击提升按钮
2、选择一个已有的提升
如果我们前面已经新建了提升,当我们在其他form中需要使用的时候,直接指定一个提升即可,不必再为同样功能的控件提升逐一写提升代码了。如下图:
二、准备控件支持文件
1、选择空白类文件编写支持文件
提升是需要准备支持文件的,每个提升后的控件其实就是一个新的控件类,那么就需要cpp和h文件来支持。这里我们来一份空白的文件
一定记得勾选include Qwidget,否则后面的代码编写要从零开始。这里可以省去很多麻烦
2、利用窗体类获取支持文件
当然,事情都是灵活的,你也可以利用界面设计器的widget窗体来完成,因为我们知道任何控件的父类都是widget
只不过这里会多一个UI文件,我们时候将其删除即可。
三、编写必要代码
1、利用空白类获取支持文件的代码编写
一开始,我们得到的头文件如下图这样
cpp文件如这样
假如我们要提升的为textedit控件,那么修改好的代码为:
#ifndef NEWTEXTEDIT_H
#define NEWTEXTEDIT_H
#include <QWidget>
#include <QTextEdit>
class newTextEdit : public QTextEdit
{
Q_OBJECT
public:
newTextEdit(QWidget *parent = 0);
};
#endif // NEWTEXTEDIT_H
修改好了的cpp文件
#include "newtextedit.h"
newTextEdit::newTextEdit(QWidget *parent)
: QTextEdit(parent)
{
}
2、利用窗体类获取支持文件的代码编写
和生成一个窗体一样,系统会为我们生成三个文件,这样我们只要小小的修改就可以了,除了把包涵的ui的头文件去掉,还要修改下图所示标识部分的代码
修改完后是这样:
#include "newtextedit.h"
newTextEdit::newTextEdit(QWidget *parent) :
QTextEdit(parent)
{
//ui->setupUi(this);
}
newTextEdit::~newTextEdit()
{
delete ui;
}
cpp文件这样
#ifndef NEWTEXTEDIT_H
#define NEWTEXTEDIT_H
#include <QWidget>
#include <QTextEdit> //增加控件的类
namespace Ui {
class newTextEdit;
}
class newTextEdit : public QTextEdit //继承的父类修改为控件类
{
Q_OBJECT
public:
explicit newTextEdit(QWidget *parent = 0);
~newTextEdit();
private:
Ui::newTextEdit *ui;
};
#endif // NEWTEXTEDIT_H
三、需要注意的
1、两种获取支持文件的方式,我强烈推荐第二种,通过窗体设计类获取,第一种空白类文件的修改过于麻烦
2、需要注意的是,如果你已经使用了控件的某些属性,那么在自定义控件中也须需要实现的。