QT學習筆記-8.查找文件對話框
只所以選擇這個QT自帶的例子有2個原因
1是界面簡單容易理解
2是當點擊more按鍵會動態改變窗體出現高級選項(我想知道這個是如何做到的)
基本代碼如下:
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
class QCheckBox;
class QDialogButtonBox;
class QGroupBox;
class QLabel;
class QLineEdit;
class QPushButton;
QT_END_NAMESPACE
class FindDialog : public QDialog
{
Q_OBJECT
public:
FindDialog(QWidget *parent = 0);
private:
QLabel *label;
QLineEdit *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *fromStartCheckBox;
QCheckBox *wholeWordsCheckBox;
QCheckBox *searchSelectionCheckBox;
QCheckBox *backwardCheckBox;
QDialogButtonBox *buttonBox;
QPushButton *findButton;
QPushButton *moreButton;
QWidget *extension;
};
#endif
.cpp
#include <QtGui>
#include "finddialog.h"
FindDialog::FindDialog(QWidget *parent)
: QDialog(parent)
{
label = new QLabel(tr("Find &what:"));
lineEdit = new QLineEdit;
//! 這個成員函數的作用是當點擊控件快捷鍵則把響應發送到Buddy控件
label->setBuddy(lineEdit);
caseCheckBox = new QCheckBox(tr("Match &case"));
fromStartCheckBox = new QCheckBox(tr("Search from &start"));
fromStartCheckBox->setChecked(true);
findButton = new QPushButton(tr("&Find"));
findButton->setDefault(true);
moreButton = new QPushButton(tr("&More"));
moreButton->setCheckable(true);
//moreButton->setAutoDefault(false);
//! 又是對話框按鈕盒,不過這次使用和上次有點區別 其子按鈕是加上去的
buttonBox = new QDialogButtonBox(Qt::Vertical);
buttonBox->addButton(findButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(moreButton, QDialogButtonBox::ActionRole);
extension = new QWidget;
wholeWordsCheckBox = new QCheckBox(tr("&Whole words"));
backwardCheckBox = new QCheckBox(tr("Search &backward"));
searchSelectionCheckBox = new QCheckBox(tr("Search se&lection"));
//! 綁定時間(需要注意的是SINGLA,SLOT中的函數必須是形式完備的)
connect(moreButton, SIGNAL(toggled(bool)), extension, SLOT(setVisible(bool)));
//! 擴展控件部分(使用QVBox布局)
QVBoxLayout *extensionLayout = new QVBoxLayout;
extensionLayout->setMargin(0);
extensionLayout->addWidget(wholeWordsCheckBox);
extensionLayout->addWidget(backwardCheckBox);
extensionLayout->addWidget(searchSelectionCheckBox);
extension->setLayout(extensionLayout);
//! 文本框和搜索鍵
QHBoxLayout *topLeftLayout = new QHBoxLayout;
topLeftLayout->addWidget(label);
topLeftLayout->addWidget(lineEdit);
//! 輔助控件組
QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addLayout(topLeftLayout);
leftLayout->addWidget(caseCheckBox);
leftLayout->addWidget(fromStartCheckBox);
leftLayout->addStretch(1);
//! 主布局使用格子管理器
QGridLayout *mainLayout = new QGridLayout;
//! 設置大小不能更改
mainLayout->setSizeConstraint(QLayout::SetFixedSize);
//! 把LeftLayout管理器放在左上角即0,0位置處
mainLayout->addLayout(leftLayout, 0, 0);
mainLayout->addWidget(buttonBox, 0, 1);
mainLayout->addWidget(extension, 1, 0);
setLayout(mainLayout);
setWindowTitle(tr("Extension"));
extension->setVisible(false);
}
需要說明的是
#include <QtGui>是包含所有的GUI控件頭文件
我們不再需要
#include <QLabel>
#include <QEdit>
不過看看代碼還真應了那句話復雜界面都是布局管理器堆積出來的
另外注意這句話
mainLayout->addWidget(extension, 1, 0);
把extension放在格子管理器的1,0位置
如果注銷掉這句話可以看看出來的界面是什么樣子的
最后要說的就是extension->setVisible(false);
在開始我們把exntension控件設置為隱藏狀態
當然也可以使用函數hide().
由于之前綁定了more按鍵和extension,
我們就可以通過點擊more按鍵來顯示和隱藏extension控件了