Qt 第六章 FindDialog和三种布局。

来源:互联网 发布:文明5 mac 迅雷 编辑:程序博客网 时间:2024/06/09 02:49

第六章 对FindDialog有三种构建方法。


第一种是固定大小,窗体大小无法拖动和改变。






第二种  可以调整大小

不用layout来做,在构造函数中,指定了窗体大小之后,还需要重载

resizeEvent函数来对窗体重新调整:




void FindFileDialog::resizeEvent(QResizeEvent * /* event */){    int extraWidth = width() - minimumWidth();    int extraHeight = height() - minimumHeight();    namedLabel->setGeometry(9, 9, 50, 25);    namedLineEdit->setGeometry(65, 9, 100 + extraWidth, 25);    lookInLabel->setGeometry(9, 40, 50, 25);    lookInLineEdit->setGeometry(65, 40, 100 + extraWidth, 25);    subfoldersCheckBox->setGeometry(9, 71, 156 + extraWidth, 23);    tableWidget->setGeometry(9, 100, 156 + extraWidth,                             50 + extraHeight);    messageLabel->setGeometry(9, 156 + extraHeight, 156 + extraWidth,                              25);    findButton->setGeometry(171 + extraWidth, 9, 85, 32);    stopButton->setGeometry(171 + extraWidth, 47, 85, 32);    closeButton->setGeometry(171 + extraWidth, 84, 85, 32);    helpButton->setGeometry(171 + extraWidth, 149 + extraHeight, 85,                            32);}






以messagelabel为例:


把高度调为17.








调整大小时,x不变,y坐标变。水平宽度变,但是垂直高度不变。

x不变,反映出来就是各个控件,在各自的子布局中,距离左边缘的位置不变。

EditLine的垂直距离也不变。








第三种是用layout来布局,而非指定大小和位置的“手动”。


(1)可以学到三种布局。

(2)学会构造QTableWidget

(3)手动布局以及重载resizeEvent函数。



感觉这个最合理,最后的MessageLabel小的恰到好处。








这个是QTableWidget。



//开始构建QTableWidget    QStringList labels;    labels << tr("Name") << tr("In Folder") << tr("Size")           << tr("Modified");    tableWidget = new QTableWidget;    //四列的table    tableWidget->setColumnCount(4);    //table水平的headerlabel    tableWidget->setHorizontalHeaderLabels(labels);



用layout来布局的,很顺眼:



各个窗体的位置

    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(subfoldersCheckBox, 2, 0, 1, 2);    leftLayout->addWidget(tableWidget, 3, 0, 1, 2);    leftLayout->addWidget(messageLabel, 4, 0, 1, 2);    QVBoxLayout *rightLayout = new QVBoxLayout;    rightLayout->addWidget(findButton);    rightLayout->addWidget(stopButton);    rightLayout->addWidget(closeButton);    rightLayout->addStretch();    rightLayout->addWidget(helpButton);    QHBoxLayout *mainLayout = new QHBoxLayout;    mainLayout->addLayout(leftLayout);    mainLayout->addLayout(rightLayout);    //    setLayout(mainLayout);    setWindowTitle(tr("Find Files or Folders"));



关闭窗体:

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



原创粉丝点击