前段时间QT开发的时候,有时候需要创建多个类似功能的组合控件用来显示或者用户交互。与其一个个增加控件,还要考虑控件之间的对齐问题,不如直接自定义需要的控件组合。因为之前不熟悉,也参考了很多网上的代码,这里给2个简单的例子,更多的实例完全可以根据自己的需求创建。
因为自己开发经验少,教程内容比较基础,自己做个记录,也给初学者做个参考。
开发环境
- OS :
macOS 10.15
- QT :
5.9.9
QLabel+QLineEdit
一个固定内容的文本框+一个用户可编辑的输入框。
首先新建一个类MyLineEdit
,创建对应的.h
和.cpp
。
基本思路:
- 在类内部创建一个
QBoxLayout
作为两个控件的容器,控制控件的布局。 - 在类内部创建一个
QLabel
和QLineEdit
,可根据需求设置样式。 - 创建对外的方法控制
QLabel
和QLineEdit
对应属性。
代码很简单,可以直接对照代码看。
以下是.h
文件:
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QWidget>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QLabel>
class MyLineEdit : public QWidget
{
Q_OBJECT
public:
explicit MyLineEdit(QWidget *parent = nullptr);
~MyLineEdit();
public:
//设置文本和获取文本的方法
void setLabelInfo(QString s);
void setText(QString s);
QString labelInfo();
QString text();
private:
QLabel *m_label;
QLineEdit *m_lineEidt;
QHBoxLayout *m_layout;
//初始化内部控件
void init();
};
#endif // MYLINEEDIT_H
对应的.cpp
文件:
#include "mylineedit.h"
MyLineEdit::MyLineEdit(QWidget *parent):
QWidget(parent)
{
this->init();
}
MyLineEdit::~MyLineEdit()
{
}
void MyLineEdit::init()
{
m_label = new QLabel();
m_lineEidt = new QLineEdit();
m_layout = new QHBoxLayout();
//在这里可以设置组合控件内部的格式
//简单设置下字体样式等
m_label->setStyleSheet("color:rgb(128,128,128);font-family:'SimSun'");
m_label->setObjectName("MS");
m_lineEidt->setAlignment(Qt::AlignCenter);
//固定Label的宽度,可以帮助对齐
m_label->setFixedWidth(