1. O papel do QFrame
A classe QFrame herda da classe QWidget e é herdada por QAbstractScrollArea, QLabel, QLCDNumber, QSplitter, QStackedWidget e QToolBox. Como classe base de muitos controles básicos, QFrame fornece muitos métodos membros para subclasses para implementar o design do estilo de quadro da subclasse. Os estilos de quadro consistem principalmente no formato do quadro e em um estilo de sombra usado para separar visualmente o quadro dos widgets adjacentes. Agora mesmo
- QFrame fornece funções de membro para projetar estilos de quadro para subclasses para ajudar as subclasses a projetar estilos exclusivos: bordas elevadas, bordas rebaixadas, conteúdo elevado ou conteúdo rebaixado, etc.
- QFrame também pode ser usado diretamente para criar quadros de espaço reservado simples que não contêm conteúdo.
2. Documento de tipo de membro QFrame
2.1 enumeração QFrame::Shadow
Este tipo de enumeração define o tipo de sombra usado para fornecer um efeito 3D aos quadros.
QFrame::Plain | 0x0010 | As bordas ou o conteúdo parecem ser tão altos quanto os controles ao redor |
QFrame::Elevado | 0x0020 | As bordas ou o conteúdo parecem elevados em comparação com os controles ao redor |
QFrame::Afundado | 0x0030 | As bordas ou o conteúdo parecem afundados em comparação com os controles ao redor |
2.2 enumeração QFrame::Shape
Este tipo de enum define a forma dos quadros disponíveis.
QFrame::NoFrame | 0 | Não desenhe nada |
QFrame::Caixa | 0x0001 | Desenhe uma borda para envolver o conteúdo e destacar o efeito de sombra da borda |
QFrame::Painel | 0x0002 | Desenhe um plano de conteúdo para destacar o efeito de sombra do conteúdo |
QFrame::StyledPanel | 0x0006 | Desenha um painel retangular cuja aparência depende do estilo atual da GUI. Pode ser elevado ou afundado. |
QFrame::HLine | 0x0004 | Desenhe uma linha horizontal para separar e destacar o efeito de sombra da linha |
QFrame::VLine | 0x0005 | Desenhe uma linha vertical para separar e destacar o efeito de sombra da linha |
QFrame::WinPanel | 0x0003 | Desenha um painel retangular que pode ser movido para cima ou para baixo como no Windows 2000. Especificar esta forma define a largura da linha para 2 pixels. WinPanel é fornecido para compatibilidade. |
Para independência de estilo da GUI, recomendamos o uso do StyledPanel.
2.3 enumeração QFrame::StyleMask
Esta enumeração define duas constantes que podem ser usadas para extrair os dois componentes de frameStyle().
QFrame::Shadow_Mask | 0x00f0 | A parte sombreada do valor de retorno framStyle() do controle |
QFrame::Shape_Mask | 0x000f | A parte da forma do valor de retorno framStyle() do controle |
2.4 Combinações de estilos que podem ser obtidas usando QFrame
3. Funções de membro comumente usadas do QFrame
3.1 Introdução aos protótipos de funções-membro
protótipo de função de membro | descrever |
QFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | Construtor |
virtual ~QFrame() | destruidor |
QRect frameRect() const | Obtenha o tamanho do quadro do QFrame |
vazio setFrameRect(const QRect &) | Defina o tamanho do quadro do QFrame |
QFrame::Shadow frameShadow() const | Obtenha o estilo de sombra, |
void setFrameShadow(QFrame::Shadow) | Definir estilo de sombra, |
QFrame::Shape frameShape() const | Obtenha o formato da moldura |
void setFrameShape(QFrame::Shape) | Defina o formato da moldura |
int frameStyle() const | Obtenha a forma e o estilo de sombra da moldura |
void setFrameStyle(estilo interno) | Defina a forma e o estilo de sombra da moldura |
int larguraLinha() const | Obtenha a largura da linha do quadro |
void setLineWidth(int) | Defina a largura das linhas do quadro |
int midLineWidth() const | Obtenha a largura da linha central do quadro |
void setMidLineWidth(int) | Defina a largura da linha central do quadro |
3.2 Exemplo simples
Use QLabel, uma subclasse de QFrame, para completar o design de uma interface de login simples. Ao alterar o estilo do quadro QLabel, ele fica mais consistente com o estilo de QLineEdit, QPushButton e outros controles.
//.h文件
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
QLabel *useLabel;
QLabel *pwLabel;
QLabel *useEdit;
QLabel *pwEdit;
QLabel *checkBtn;
QLabel *cancelBtn;
};
//.c文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->resize(400,550);
useLabel = new QLabel(this);
useLabel->setText("用户名:");
useLabel->move(70,150);
useLabel->resize(50,30);
//设置"用户名"标签的框架样式为 无边框+无阴影
useLabel->setFrameShape(QFrame::NoFrame);
useLabel->setFrameShadow(QFrame::Plain);
useEdit = new QLabel(this);
useEdit->move(150,150);
useEdit->resize(200,30);
//设置"用户名"输入框的框架样式为 边框+突起
useEdit->setFrameStyle(QFrame::Box|QFrame::Raised);
useEdit->setLineWidth(2);
pwLabel = new QLabel(this);
pwLabel->setText("密码:");
pwLabel->move(70,210);
pwLabel->resize(50,30);
//设置"密码"标签的框架样式为 无边框+无阴影
pwLabel->setFrameStyle(QFrame::NoFrame|QFrame::Plain);
pwEdit = new QLabel(this);
pwEdit->move(150,210);
pwEdit->resize(200,30);
//设置"用户名"输入框的框架样式为 内容+凹陷
pwEdit->setFrameStyle(QFrame::Panel|QFrame::Sunken);
pwEdit->setLineWidth(2);
checkBtn = new QLabel(this);
checkBtn->setText("确认");
checkBtn->setAlignment(Qt::AlignCenter);
checkBtn->move(100,290);
checkBtn->resize(80,30);
//设置"确认"按钮的框架样式为 内容+突起
checkBtn->setFrameStyle(QFrame::Panel|QFrame::Raised);
checkBtn->setLineWidth(3);
cancelBtn = new QLabel(this);
cancelBtn->setText("取消");
cancelBtn->setAlignment(Qt::AlignCenter);
cancelBtn->move(240,290);
cancelBtn->resize(80,30);
//设置"取消"按钮的框架样式为 内容+突起
cancelBtn->setFrameStyle(QFrame::Panel|QFrame::Raised);
cancelBtn->setLineWidth(3);
}
Renderização: