Qt4学习-SPREADSHEET之FindDialog

原创 2007年09月25日 18:33:00

 

"finddialog.h" code:

/*避免多重包含*/
#ifndef FINDDIALOG_H
#define FINDDIALOG_H

/*QDialog继承了QWidget*/
#include <QDialog>

/*前置声明,告诉编译器类的存在,使编译更快些*/
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;

/*定义FindDialog类作为QDialog的子类*/
class FindDialog : public QDialog
{

/*拥有信号和槽的类必须有Q_OBJECT宏*/
 Q_OBJECT
public:

/*parent参数指定了父窗口部件,默认情况下是个空指针,意味着它没有父窗口部件*/
 FindDialog(QWidget *parent = 0); 

/**声明公共信号
*singals是个宏,预处理器会把它转换成标准c++
*/
signals:

/**声明两个信号,这里&str是引用
*当用户点击find按钮,如果前向查询选中,发射findPrevious信号
*否则发射findNext信号。
*
*Qt::CaseSensitivity是个枚举类型,值分别可以为Qt::CaseSensitivity或Qt::CaseInsensitivity。
*/
 void findNext(const QString &str,Qt::CaseSensitivity cs);
 void findPrevious(const QString &str,Qt::CaseSensitivity cs);

/*声明私有槽,与signals一样是个宏*/
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" code:

/*QtGui中包含着QtCore和QtGui模块的所有类的定义,包含这个头文件就不用逐个包含所有类了*/
#include <QtGui>
#include "finddialog.h"

/*将parent参数传递给父类的构造函数*/
FindDialog::FindDialog(QWidget *parent) : QDialog(parent)
{

/*创建控件,tr()可使字符自动转换成其他语言,有tr()是个好习惯
*&表示快捷键,即"Alt + w"
*/
 label = new QLabel(tr("Find &what:"));
 lineEdit = new QLineEdit;

/*设置友好控件,即当用户按下"Alt + w"时,焦点会转移到该标签的友好控件*/
 label->setBuddy(lineEdit);
 caseCheckBox = new QCheckBox(tr("Match &case"));
 backwardCheckBox = new QCheckBox(tr("Search &backward"));
 findButton = new QPushButton(tr("&Find"));
 
/*将findButton设置为窗体的默认按钮*/
 findButton->setDefault(true);

/*将findButton设为禁用,即灰色按钮*/
 findButton->setEnabled(false);
 closeButton = new QPushButton(tr("Close"));

/*当lineEdit(文本框)内容发生改变时,私有槽enableFindButton(const QString &)会被调用*/
 connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(enableFindButton(const QString &)));

/*当findButton被点击,私有槽findClicked()会被调用*/
 connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));

/*当closeButton被点击,对话框关闭,槽close()继承自QWidget,默认的功能是将控件隐藏(并非删除)*/
 connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));

/*创建布局管理器,QHBoxLayout为横向,QVBoxLayout为纵向*/
 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"));

/*设置对话框的大小,sizeHint()返回对话框的理想尺寸*/
 setFixedHeight(sizeHint().height());
}

/*当用户点击Find按钮,findClicked()槽被调用*/
void FindDialog::findClicked()
{
 QString text = lineEdit->text();

/*Qt::CaseSensitivity枚举类型,如果caseCheckBox被选择,cs为CaseSensitive(1)否则为CaseInsensitive(0)*/
 Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;

/**发射findPrevious()或findNext()信号,emit关键字会被转成标准c++
*如果前向选择按钮被选中,则发射findPrevious()信号,否则发射另一个信号
*/
 if (backwardCheckBox->isChecked()) {
  emit findPrevious(text,cs);
 } else {
  emit findNext(text,cs);
 }
}

/*当文本框内容改变时,enableFindButton槽被调用*/
void FindDialog::enableFindButton(const QString & text)
{

/*如果文本框非空,则findButton可用*/
 findButton->setEnabled(!text.isEmpty());
}


 
 "main.cpp" code:

#include <QApplication>
#include "finddialog.h"
int main(int argc,char *argv[])
{

/*创建一个QApplication对象管理整个程序资源,Qt支持命令行参数,通过构造函数传递argc和argv参数给程序使用*/
 QApplication app(argc,argv);
 FindDialog *dialog = new FindDialog;

/*将dialog设置成可见的,控件生成后一般是隐藏的*/
 dialog->show();

/*将程序的控制权交给Qt,进入事件循环*/
 return app.exec();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Qt4 FindDialog

  • 2012-07-23 15:14
  • 4.19MB
  • 下载

学习笔记之qt4的信号与槽机制

信号是一个特定的标识;一个槽就是一个函数,与一般的函数不同,槽函数既能够和信号关联,也能够像普通函数一样直接调用。       当某个事件出现时,通过发送信号,可以将与之相关联的槽函数激活,即执行槽...

QT4学习之designer的初步使用

主机环境:linux 内核版本:2.6.32-220.el6.i686 一、启动designer  在桌面环境下, 也就是/etc/inittab文件中启动级别为5. 只有在桌面环境下才...

学习笔记之qt4程序中引入自定义窗口部件之多继承方式

多继承中,需要从标准的 QWidget类和Qt designer绘制的界面类继承。这样,继承自qt标准的窗口部件类和界面类的子类就可以直接访问其父类的公有成员和保护成员。 1、用qt creat...

C++ GUI Qt4学习笔记(八)

本章介绍Qt的二维图形引擎,Qt的二维图形引擎是基于QPainter类的。QPainter既可以绘制几何图形(点、线、矩形等),也可以绘制像素映射、图像和文字。此外QPainter还支持一些高级特性,...

QT4学习笔记 重新实现事件处理函数(Reimplementing Event Handlers)

http://hi.baidu.com/changfa1999/blog/item/a4f75a7ad06fcae82f73b3b4.html 7.1 重新实现事件处理函数(Reimplementin...

C++ GUI Qt4学习笔记(一)

这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序。 引入两个重要概念:一个是“信号和槽”,另一个是“布局”。 窗口部件(widget)是用户界面的一个...

NSIS学习笔记(以Qt4程序打包为例)

一个Qt4程序安装(发布)后它应该有如下的结构(可参考 Qt 程序在 windows 下的发布 ): |-- sample.exe |-- QtCore4.dll |-- QtGui4.dll |-...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)