C++ GUI Qt 第六章 布局管理 学习笔记1

 

1.为什么使用布局管理?

    1>每一个窗口部件都必须给定一个合适的大小和位置。

    2>可以确保窗体能够自动适应于不同的字体语言和系统平台。

2.布局管理器QHBoxLayout QVBoxLayout QGridLayout.

3.

    messageLabel = new QLabel(tr("0 files found"));
    messageLabel->setFrameShape(QLabel::Panel);//面板
    messageLabel->setFrameShadow(QLabel::Sunken);//凹陷

4. 手敲了那个使用布局管理器的例子,主要注意的是,我在构造函数中把对象都new出来了没有加上布局这块内容为什么显示不出来呢。您要是知道的话可以给我留言哦。前面就是addWidget() ,后面的是addLayout(),最后setLayout();然后就可以显示出来了。

QGridLayout *leftLayout = new QGridLayout;
	leftLayout->addWidget(namedLabel, 0, 0);
	leftLayout->addWidget(namedLineEdit, 0, 1);
	leftLayout->addWidget(lookInLabel,	1, 0);
	leftLayout->addWidget(lookInLineEdit, 1, 1);
	leftLayout->addWidget(tableWidget, 2,0, 1, 2);//第一个是widgete类型,第二个是行数,
//3是列数,4是占用几行,4是占用几列。如果不写默认是1

5.然后就是QSizePolicy 大小策略。没看书的时候都不知道有这个东西,只知道有个sizeHint()函数返回系统推荐的大小。后来看书后发现还有个最小推荐大小minimumSizeHint(),在QtDesigner中可以手动修改这个东西。

看完书才知道原来这个东西是设置系统推荐的大小尺寸的。

6.分组布局 QStackedLayout

在敲代码的时候发现前面有两个宏 QT_BEGIN_NAMESPACE和QT_END_NAMESPACE

QT_BEGIN_NAMESPACE其实就是个宏,以前Qt4是没有Qt命名空间的,后来才加上的,编译Qt源码时会有选项,是否将这些类放到专用的Qt命名空间内,默认是没有的。这就出来问题了,为了统一,如果你的代码在默认没有Qt命名空间的SDK中编译,那你就不用在前置声明下面这些类的时候加上命名空间,但如果你在有Qt命名空间的SDK中编译,那就得加上命名空间了,为了屏蔽这个差异,使得你的源码能在这两种情况下都进行编译,Qt提供了QT_BEGIN_NAMESPACE宏,这样开发者就省得自己来用程序或宏进行处理了。
class QDialogButtonBox;
class QPushButton;
class QSqlTableModel;
至于说加快编译速度什么的,那是上述三个类的前置声明的作用,这是与Qt无关的(也即与QT_BEGIN_NAMESPACE宏无关)。如果你在头文件中只用到一些类的指针(而非实现),那么就可以不包含这些类的头文件,而只使用上面形式的类型前置声明,而在具体实现时才包含入上面这些类型的头文件。如此,头文件里所包含的头文件减少了,那么使用到这个头文件的程序就能包含更少的内容,而不是每次都包含很多头文件,解析起来都耗时。

--来自qtcn

7. 

	mainLayout->setColumnStretch(0,1);//设置列拉伸系数
	mainLayout->setColumnStrech(1,3);

第一列拉伸系数为1, 第二列拉伸系数为3。

8. 

QVBoxLayout *pageLayout = new QVBoxLayout;
	pageLayout->setMargin(0);

ui->horizontalLayout->setMargin(); //表示布局的外边距距

9.

PreferenceDialog::PreferenceDialog(QWidget *parent)
	: QDialog(parent)
{
	createApperancePage();
	createWebBrowserPage();
	createMailAndNewsPage();
	createAdvancedPage();

	buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok 
		| QDialogButtonBox::Cancel);

	listWidget = new QListWidget;
	listWidget->addItem(tr("Appearance"));
	listWidget->addItem(tr("Web Browser"));
	listWidget->addItem(tr("Mail & News"));
	listWidget->addItem(tr("Advanced"));

	stackedLayout = new QStackedLayout;
	stackedLayout->addWidget(appearancePage);
	stackedLayout->addWidget(webBrowserPage);
	stackedLayout->addWidget(mailAndNewsPage);
	stackedLayout->addWidget(advancedPage);

	connect(listWidget, SIGNAL(currentRowChanged(int)), 
		stackedLayout, SLOT(setCurrentIndex(int)));

	QGridLayout *mainLayout = new QGridLayout;
	mainLayout->setColumnStretch(0,1);
	mainLayout->setColumnStretch(1,3);
	mainLayout->addWidget(listWidget, 0, 0);
	mainLayout->addLayout(stackedLayout, 0, 1);
	//mainLayout->addStretch();
	mainLayout->addWidget(buttonBox, 1, 0 , 1, 2);

	setLayout(mainLayout);
	connect(buttonBox, SIGNAL(accepted()), this, SLOT(accepted()));
	connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

	setWindowTitle(tr("Preferences"));
	listWidget->setCurrentRow(0);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值