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);
}