1. QFrameの役割
QFrame クラスは QWidget クラスを継承し、QAbstractScrollArea、QLabel、QLCDNumber、QSplitter、QStackedWidget、および QToolBox によって継承されます。QFrame は、多くの基本コントロールの基本クラスとして、サブクラスのフレーム スタイルのデザインを実装するための多くのメンバー メソッドをサブクラスに提供します。フレーム スタイルは主に、フレームの形状と、フレームを周囲のウィジェットから視覚的に分離するために使用されるシャドウ スタイルで構成されます。今すぐ
- QFrame は、サブクラスのフレーム スタイルを設計するためのメンバー関数を提供し、サブクラスが独自のスタイル (盛り上がった境界線、沈んだ境界線、盛り上がったコンテンツ、または沈んだコンテンツなど) を設計できるようにします。
- QFrame を直接使用して、コンテンツを含まない単純なプレースホルダー フレームを作成することもできます。
2. QFrame メンバー タイプのドキュメント
2.1 列挙型 QFrame::Shadow
この列挙型は、フレームに 3D 効果を提供するために使用されるシャドウのタイプを定義します。
Qフレーム::プレーン | 0x0010 | 境界線またはコンテンツが周囲のコントロールと同じ高さで表示される |
Qフレーム::レイズド | 0x0020 | 周囲のコントロールに比べて境界線またはコンテンツが盛り上がって見える |
QFrame::沈んだ | 0x0030 | 境界線やコンテンツが周囲のコントロールに比べてくぼんで見える |
2.2 列挙型 QFrame::Shape
この列挙型は、使用可能なフレームの形状を定義します。
QFrame::NoFrame | 0 | 何も描かないでください |
Qフレーム::ボックス | 0x0001 | コンテンツを囲む境界線を描画し、境界線の影の効果を強調します。 |
QFrame::パネル | 0x0002 | コンテンツ プレーンを描画して、コンテンツのシャドウ効果を強調します。 |
QFrame::StyledPanel | 0x0006 | 現在の GUI スタイルに応じて外観が異なる長方形のパネルを描画します。盛り上がったり沈んだりすることもあります。 |
QFrame::HLine | 0x0004 | 水平線を引いて、線の影効果を分離して強調します。 |
QFrame::VLine | 0x0005 | 垂直線を引いて線を分離し、その線の影効果を強調します。 |
QFrame::WinPanel | 0x0003 | Windows 2000 のように上下に移動できる長方形のパネルを描画します。この形状を指定すると、線幅が 2 ピクセルに設定されます。WinPanel は互換性のために提供されています。 |
GUI スタイルに依存しないようにするには、代わりに StyledPanel を使用することをお勧めします。
2.3 列挙型 QFrame::StyleMask
この列挙は、frameStyle() の 2 つのコンポーネントを抽出するために使用できる 2 つの定数を定義します。
QFrame::Shadow_Mask | 0x00f0 | コントロールのframStyle()戻り値のシャドウ部分 |
QFrame::Shape_Mask | 0x000f | コントロールのframStyle()戻り値の形状部分 |
2.4 QFrame を使用して実現できるスタイルの組み合わせ
3. QFrame のよく使われるメンバー関数
3.1 メンバー関数プロトタイプの概要
メンバー関数のプロトタイプ | 説明する |
QFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | コンストラクタ |
仮想 ~QFrame() | デストラクター |
QRect FrameRect() const | QFrameのフレームサイズを取得する |
void setFrameRect(const QRect &) | QFrameのフレームサイズを設定する |
QFrame::Shadow FrameShadow() const | 影のスタイルを取得し、 |
void setFrameShadow(QFrame::Shadow) | 影のスタイルを設定し、 |
QFrame::Shape FrameShape() const | フレームの形状を取得する |
void setFrameShape(QFrame::Shape) | フレームの形状を設定する |
int FrameStyle() const | フレームの形状と影のスタイルを取得する |
void setFrameStyle(int スタイル) | フレームの形状と影のスタイルを設定します |
int lineWidth() const | 枠線の幅を取得する |
void setLineWidth(int) | 枠線の幅を設定する |
int midLineWidth() const | フレームの中心線の幅を取得します |
void setMidLineWidth(int) | 枠の中心線の幅を設定します |
3.2 簡単な例
QFrame のサブクラスである QLabel を使用して、シンプルなログイン インターフェイスのデザインを完成させます。QLabel フレーム スタイルを変更することで、QLineEdit、QPushButton、その他のコントロールのスタイルとの一貫性が高まります。
//.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);
}
レンダリング: