qt-dialog

来源:互联网 发布:南风知我意妈妈网 编辑:程序博客网 时间:2024/05/24 07:06
finddialog.h#ifndef FINDDIALOG_H#define FINDDIALOG_H #include <QtGui/QDialog>// 用于对话框中的类的前置声明,// 这样会使编译更快一些class QCheckBox;class QLabel;class QLineEdit;class QPushButton;class FindDialog: public QDialog {// 要定义信号与槽都需要这个宏Q_OBJECTpublic:// 构造函数,没有父窗口FindDialog(QWidget *parent = 0);    // 声明信号signals:void findNext(const QString &str, Qt::CaseSensitivity cs);void findPrevious(const QString &str, Qt::CaseSensitivity);// 声明槽private slots:void findClicked();void enableFindButton(const QString &text);private:QLabel *label;QLineEdit *lineEdit;QCheckBox *caseCheckBOX;QCheckBox *backwardCheckBox;QPushButton *findButton;             QPushButton *closeButton;};#endif



 

finddialog.cpp--------------------------------#include <QtGui>#include "finddialog.h"FindDialog::FindDialog(QWidget *parent):QDialog(parent){label = new QLabel(tr("Find &what:"));lineEdit = new QLineEdit;label->setBuddy(lineEdit);    // 设置伙伴// tr()是翻译成其他语言的标记caseCheckBOX = new QCheckBox(tr("Match &case"));backwardCheckBox = new QCheckBox(tr("Search &backward"));findButton = new QPushButton(tr("&Find"));findButton->setDefault(true);  // 设置默认按钮findButton->setEnabled(false); // 禁用Find按钮closeButton = new QPushButton(tr("Close"));// 文本发生变化时调用connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SLOT(enableFindButton(const QString &)));    // 单击Find按钮时调用connect(findButton, SIGNAL(clicked()),this, SLOT(findClicked()));// 单击Close按钮时调用connect(closeButton, SIGNAL(clicked()),this, SLOT(close()));QHBoxLayout *topLeftLayout = new QHBoxLayout;topLeftLayout->addWidget(label);topLeftLayout->addWidget(lineEdit);QVBoxLayout *leftLayout = new QVBoxLayout;leftLayout->addLayout(topLeftLayout);leftLayout->addWidget(caseCheckBOX);leftLayout->addWidget(backwardCheckBox);QVBoxLayout *rightLayout = new QVBoxLayout;rightLayout->addWidget(findButton);rightLayout->addWidget(closeButton);rightLayout->addStretch();QHBoxLayout *mainLayout = new QHBoxLayout;mainLayout->addLayout(leftLayout);mainLayout->addLayout(rightLayout);setLayout(mainLayout);setWindowTitle(tr("Find"));// 返回一个窗口部件的“理想”尺寸大小setFixedHeight(sizeHint().height());}// 用户点击Find按钮时就会调用void FindDialog::findClicked(){QString text = lineEdit->text();Qt::CaseSensitivity cs = caseCheckBOX->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;if (backwardCheckBox->isChecked()) {emit findPrevious(text, cs);} else {emit findNext(text, cs);}}// 只要用户改变了行编辑器中的文本,就会调用,否则禁用FIND按钮void FindDialog::enableFindButton(const QString &text){findButton->setEnabled(!text.isEmpty());}main.cpp--------------------------------#include "myapp.h"#include <QtGui/QApplication>#include "finddialog.h"int main(int argc, char *argv[]){QApplication a(argc, argv);    FindDialog *dialog = new FindDialog;dialog->show();return a.exec(); }



原创粉丝点击