QT學(xué)習(xí)筆記-8.查找文件對(duì)話框
只所以選擇這個(gè)QT自帶的例子有2個(gè)原因
1是界面簡(jiǎn)單容易理解
2是當(dāng)點(diǎn)擊more按鍵會(huì)動(dòng)態(tài)改變窗體出現(xiàn)高級(jí)選項(xiàng)(我想知道這個(gè)是如何做到的)
基本代碼如下:
#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;
//! 這個(gè)成員函數(shù)的作用是當(dāng)點(diǎn)擊控件快捷鍵則把響應(yīng)發(fā)送到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);
//! 又是對(duì)話框按鈕盒,不過這次使用和上次有點(diǎn)區(qū)別 其子按鈕是加上去的
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"));
//! 綁定時(shí)間(需要注意的是SINGLA,SLOT中的函數(shù)必須是形式完備的)
connect(moreButton, SIGNAL(toggled(bool)), extension, SLOT(setVisible(bool)));
//! 擴(kuò)展控件部分(使用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;
//! 設(shè)置大小不能更改
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>
不過看看代碼還真應(yīng)了那句話復(fù)雜界面都是布局管理器堆積出來的
另外注意這句話
mainLayout->addWidget(extension, 1, 0);
把extension放在格子管理器的1,0位置
如果注銷掉這句話可以看看出來的界面是什么樣子的
最后要說的就是extension->setVisible(false);
在開始我們把exntension控件設(shè)置為隱藏狀態(tài)
當(dāng)然也可以使用函數(shù)hide().
由于之前綁定了more按鍵和extension,
我們就可以通過點(diǎn)擊more按鍵來顯示和隱藏extension控件了