QT_StepByStep(3)--创建一个对话框

  • FINDDIALOG_H 头文件:
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QtGui/QDialog>
/*声明四个用到的类*/
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
/*首先定义一个派生类QDialog,基类是FindDialog*/
class FindDialog  : public QDialog
{
/*Q_OBJECT 是宏,定义信号槽的类都要声明这个宏*/
Q_OBJECT
/*构造函数和析构函数*/
public:
FindDialog(QWidget  *parent = 0);
~FindDialog();
/*signals,QT关键字,对信号定义.FindDialog 有两个public 的信号,它可以在特定的时刻发出这两个信号,就这里来说,如果用户点击了Find 按钮,并且选中了 Search  backward ,就会发出 findPrevious() ,否则发出findNext()。*/
signals:
void findNext(const QString &str, Qt::CaseSensitivity  cs);
void findPrevious(const QString &str, Qt::CaseSensitivity  cs);
/*私有槽的定义.*/
private slots:
void findClicked();
void enableFindButton(const  QString &text);
private:
QLabel  *label;
QLineEdit  *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *backwardCheckBox;
QPushButton *findButton;
QPushButton *closeButton;
};
#endif // FINDDIALOG_H
  • FindDialog.cpp 函数:
/*QtGui,它包括了QtCore 和 QtGui 模块。是统称,在正式开发的时候用到哪些组件,使能哪些组件*/
#include <QtGui>
#include "finddialog.h"
/*在类的外面定义派生类狗在函数*/
FindDialog::FindDialog(QWidget  *parent): QDialog(parent)
{
label  = new QLabel(tr("Find  &what:"));
lineEdit  = new QLineEdit;
label ->setBuddy(lineEdit);
/*创建了两个 QCheckBox,把默认的按钮设为 findButton,把 findButton 设为不可用——也就是变成灰色的了。*/
 
caseCheckBox = new QCheckBox(tr("Match &case"));
backwardCheckBox = new QCheckBox(tr("Search &backford"));
findButton = new QPushButton(tr("&Find"));
findButton->setDefault(true);
findButton->setEnabled(false);
closeButton = new QPushButton(tr("Close"));
/*connect 语句,用来连接信号槽,当 lineEdit 发出textChanged(const  QString&) 信 号 时, FindDialog 的 enableFindButton(const QString&)函数会被调用。

注意,connect()函数也是 QObject 的,因为我们继承了 QObject,所以能够直接使用。

*/
connect(lineEdit,  SIGNAL(textChanged(const  QString&)),  this, SLOT(enableFindButton(const QString&)));
connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked()));
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());
//设置对话框高度,这里调用sizeHint().height())函数为最理想高度
}
 
/*槽函数*/
FindDialog::~FindDialog()
{
}
/*槽函数,首先取出 lineEdit 的输入值;然后判断 caseCheckBox是不是选中。如果 backwardCheckBox 被选中,就 emit(发出)信号 findPrevious(),否则 emit 信号 findNext。*/
void FindDialog::findClicked()
{
QString text = lineEdit->text();
Qt::CaseSensitivity  cs  =  caseCheckBox->isChecked()  ?  Qt::CaseInsensitive  : Qt::CaseSensitive;
if(backwardCheckBox->isChecked()) {
    emit findPrevious(text, cs);
    } else {
    emit findNext(text, cs);
}
}
void FindDialog::enableFindButton(const  QString &text)
{
findButton->setEnabled(!text.isEmpty());
}
  • main.cpp
#include <QApplication>
#include "finddialog.h"
int main(int argc, char *argv[])
{
QApplication  app(argc, argv);
FindDialog  *dialog  = new FindDialog;
dialog->show();
return app.exec();
}
时间: 2024-10-18 14:32:15

QT_StepByStep(3)--创建一个对话框的相关文章

QT学习之路--创建一个对话框

Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included from

(七)android 通知对话框,并且监听了返回键,当按下返回键也会创建一个对话框

一.activity_main.java中代码   1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="matc

Xcode 6 如何创建一个用于纯手写UI界面的Empty Application?

1. 运行Xcode6, 创建一个Single View Application工程. 2. 随后删除Main.storyboard和LaunchScreen.xib,扔进废纸篓. 3.打开Info.plist,把Launch screen interface file base name,以及Main storyboard file base name两项,删除(点击旁边的减号即可) 4. 打开工程项目属性文件,点击Target下面的第一项,再选择General选项卡,向下找到Use Asse

Maven和Eclipse:m2eclipse -- 创建一个简单的Maven项目

陈科肇-欢迎转载,转载请注明出来,谢谢! ================== 在Maven中,我们使用archetype来创建项目.而在Ecelipse中,我们通过新建项目向导来创建项目.Eeclipse中的新建项目向导为我们提供了大量的创建项目的模板.m2eclipse为这个向导添加了如下的功能: 1.从SCM仓库签出一个Maven项目 2.使用Maven archetype(Maven 原型,即模板)创建一个Maven项目 3.创建一个Maven POM文件 4.实操-例子 =======

eclipes创建一个web项目web.xml不能自动更新的原因(web.xml和@WebServlet的作用)

在eclipse中创建一个Web项目的时候,虽然有web.xml生成,但是再添加Servlet类文件的时候总是看不见web.xml的更新,所以异常的郁闷!上网查了查,原来我们在创建Web项目的时候,会弹出一个对话框,“Dynamic web module version”这个选项默认成了3.0,按照老规范,应该是在eclipse的WebContent \ WEB-INF \ 目录下创建web.xml的.而新规范是可以不用web.xml的,如tomcat 7.0就支持新规范,这样相关的servle

利于Wininet创建一个FTP客户端的步骤

Wininet是Win32关于网络的API,MFC也有对于Wininet的封装,可以利用这组API实现FTP和HTTP通信. Wininet API的头文件:Wininet.下面是Wininet建立FTP客户端的一般步骤.第一步:初始话Wininet,实际上就是设置一些关于是否使用代理,访问方式等的参数.第二步:建立一个FTP链接.第三步:操作ftp服务器上的文件.第四步:关闭各种句柄. 作用 函数原型 说明 初始Wininet函数 HINTERNET InternetOpen( LPCTSTR

WCF服务二:创建一个简单的WCF服务程序

在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WCFSolution". 2.解决方案右键->添加->类库项目,类库名称为CalculateWcfService. 3.创建服务契约 WCF采用基于契约的交互方式实现了服务的自制.服务契约:是相关操作的集合.契约就是双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺.签署了某个

soapui中文操作手册(一)----创建一个新的项目

1) 创建一个新的项目 点击项目,选择新建项目SOAP.这将打开一个新的SOAP项目对话框. 注意:你也可以做CTRL + N(WIN)或CMD+ N(MAC)来创建一个新的SOAP项目. 在新的SOAP项目对话框中输入项目名称,然后单击确定 这将创建在导航器一个新的项目. 恭喜你,你刚刚创建了你的第一个项目SoapUI.让我们添加一个WSDL. 2) 添加一个WSDL 在SoapUI项目中,SOAP大多是基于一个WSDL.虽然不是必须通过导入WSDL,但它使测试更容易,因为WSDL包含您需要了

Xcode 6 正式版如何创建一个Empty Application

Xcode 6 正式版里面没有Empty Application这个模板,这对于习惯了纯代码编写UI界面的程序员来说很不习惯. 有网友给出了一个解决方法是,把Xcode 6 beta版里面的模板复制过去. 但是,如果性急的你已经把Xcode 6 beta彻底删除,网上又找不到Empty Application模板的下载,怎么办?总不用重新把几个G的Xcode 6 beta重新下一遍吧? 本文介绍在Xcode 6正式版,如何将一个Single View Application变为你熟悉的Empty