【学习笔记】C++ GUI Qt4 第六章 6.1 在窗体中摆放窗口部件

放置在窗体中的每一个窗口部件都必须给定一个合适的大小和位置。Qt 提供了多个用于在窗体中摆放窗口部件的类:QHBoxLayout、QVBoxI ayout、QGridLayout和QStackLayout。这些类简单易用,几乎每个Qt开发人员都会用到它们——或者直接在源代码中,或者通过Qt设计师。使用Qt布局类的另外一个原因是:它们可以确保窗体能够自动适应于不同的字体、语言和系统平台。如果用户改变了系统的字体设置,那么该应用程序的窗体将能够立刻做出响应,并在必要的情况下重新改变自己的大小。并且如果将应用程序的用户接口翻译成了另外一种语言,那么这些布局类就会考虑窗口部件中翻译的内容,以尽量避免文本被截断的现象发生。可以执行布局管理功能的其他类还有QSplitter、QScrollArea、QMainWindow和QMdiArea。这些类所拥有的共同点在于它们提供了一种用户可以灵活掌控的布局方式。例如,QSpltter就提供了一个切分窗口拖动条( slitter bar) ,通过拖拽它,用户可以改变窗口部件的大小。QMdiArea 则为多文档界面(muliple document interface, MDI)——可以在一个应用程序主窗口中同时显示多个文档的方法提供了支持。因为它们经常适合用作布局类的替换方式,所以将在本章对它们进行详细介绍。

6.1 在窗体中摆放窗口部件

一共有三种基本方法用于管理窗体上子窗口部件的布局:绝对位置法、人工布局法和布局管理器法。我们将以图6.1中所给出的Find File对话框为例来依次说明这三种方法。

在这里插入图片描述

6.1.1 绝对位置法

绝对位置法是一种最原始的摆放窗口部件的方法。这可以通过对窗体的各个子窗口部件分配固定的大小和位置以及对窗体分配固定的大小实现。这里给出的是使用了绝对位置法的FindFileDialog代码,它看起来具有如下形式:

//findfiledialog.h
#ifndef FINDFILEDIALOG_H
#define FINDFILEDIALOG_H

#include <QDialog>

class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
class QTableWidget;

class FindFileDialog : public QDialog
{
   
    Q_OBJECT

public:
    FindFileDialog(QWidget *parent = 0);

private:
    QLabel *namedLabel;
    QLabel *lookInLabel;
    QLineEdit *lookInLineEdit;
    QLineEdit *namedLineEdit;
    QCheckBox *subfoldersCheckBox;
    QTableWidget *tableWidget;
    QLabel *messageLabel;
    QPushButton *findButton;
    QPushButton *stopButton;
    QPushButton *closeButton;
    QPushButton *helpButton;
};

#endif

//findfiledialog.cpp
#include <QtWidgets>

#include "findfiledialog.h"

FindFileDialog::FindFileDialog(QWidget *parent)
    : QDialog(parent)
{
   
    namedLabel = new QLabel(tr("&Named:"), this);
    namedLineEdit = new QLineEdit(this);
    namedLabel->setBuddy(namedLineEdit);

    lookInLabel = new QLabel(tr("&Look in:"), this);
    lookInLineEdit = new QLineEdit(this);
    lookInLabel->setBuddy(lookInLineEdit);

    subfoldersCheckBox = new QCheckBox(tr("Include subfolders"), this);

    QStringList labels;
    labels << tr("Name") << tr("In Folder") << tr("Size")
           << tr("Modified");

    tableWidget = new QTableWidget(this);
    tableWidget->setColumnCount(4);
    tableWidget->setHorizontalHeaderLabels(labels);

    messageLabel = new QLabel(tr("0 files found"), this);
    messageLabel->setFrameShape(QLabel::Panel);
    messageLabel->setFrameShadow(QLabel::Sunken);

    findButton = new QPushButton(tr("&Find"), this);
    stopButton = new QPushButton(tr("Stop"), this);
    closeButton = new QPushButton(tr("Close"), this);
    helpButton = new QPushButton(tr("Help"), this);

    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));

    //绝对位置设置
    namedLabel->setGeometry(9, 9, 50, 25);
    namedLineEdit->setGeometry(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值