全部博文(59)
分类: C/C++
2011-09-07 08:58:33
本文章原创于 转载请注明出处。
现在加上查找菜单的功能。因为这里要涉及关于Qt Creator的很多实用功能,所以单独用一篇文章来介绍。
以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框。对于怎么实现查找功能的,我们详细地分步说明了怎么进行类中方法的查找和使用。其中也将Qt Creator智能化的代码补全功能和程序中函数的声明位置和定义位置间的快速切换进行了介绍。
1.首先还是保存以前的工程,然后再将其打开。
我们发现Qt Creator默认的字体有点小,可以按下Ctrl键的同时按两下+键,来放大字体。也可以选择Edit->Advanced->Increase Font Size。
2.在mainwindow.h中加入#include
QLineEdit *find_textLineEdit; //声明一个行编辑器,用于输入要查找的内容
在private slots中添加
void show_findText();
在该函数中实现查找字符串的功能。
3.我们进入查找菜单的触发事件槽函数,更改如下。
void MainWindow::on_action_Find_triggered()
{
QDialog *findDlg = new QDialog(this);
//新建一个对话框,用于查找操作,this表明它的父窗口是MainWindow。
findDlg->setWindowTitle(tr(“查找”));
//设置对话框的标题
find_textLineEdit = new QLineEdit(findDlg);
//将行编辑器加入到新建的查找对话框中
QPushButton *find_Btn = new QPushButton(tr(“查找下一个”),findDlg);
//加入一个“查找下一个”的按钮
QVBoxLayout* layout = new QVBoxLayout(findDlg);
layout->addWidget(find_textLineEdit);
layout->addWidget(find_Btn);
//新建一个垂直布局管理器,并将行编辑器和按钮加入其中
findDlg ->show();
//显示对话框
connect(find_Btn,SIGNAL(clicked()),this,SLOT(show_findText()));
//设置“查找下一个”按钮的单击事件和其槽函数的关联
}
这里我们直接用代码生成了一个对话框,其中一个行编辑器可以输入要查找的字符,一个按钮可以进行查找操作。我们将这两个部件放到了一个垂直布局管理器中。然后显示这个对话框。并设置了那个按钮单击事件与show_findText()函数的关联。
5.下面我们开始写实现查找功能的show_findText()函数。
void MainWindow::show_findText()//“查找下一个”按钮的槽函数
{
QString findText = find_textLineEdit->text();
//获取行编辑器中的内容
}
12.可以看到它是一个枚举变量(enum),有三个选项,第一项是向后查找(即查找光标以前的内容,这里的前后是相对的说法,比如第一行已经用完了,光标在第二行时,把第一行叫做向后。),第二项是区分大小写查找,第三项是查找全部。
13.我们选用第一项,然后写出下面的语句。
ui->textEdit->find(findText,QTextDocument::FindBackward);
//将行编辑器中的内容在文本编辑器中进行查找
14.这时已经能实现查找的功能了。但是我们刚才看到find的返回值类型是bool型,而且,我们也应该为查找不到字符串作出提示。
if(!ui->textEdit->find(findText,QTextDocument::FindBackward))
{
QMessageBox::warning(this,tr(“查找”),tr(“找不到 %1″)
.arg(findText);
QMessageBox::warning(this,tr("查找"),tr("找不到 %1").arg(findText));
QTextCursor cursor = ui->textEdit->textCursor(); //返回当前的光标有效位置 cursor.movePosition(QTextCursor::End); //移动光标到最后面 ui->textEdit->setTextCursor(cursor); //设置textEdit的光标在最后面}
当向前查找完毕之后,就会弹出警告,当点击退出警告后,光标就会移动到textEdit的最后,又可以重新开始查找。这样就实现了全局查找。(当然QMessageBox::warning也可以注销掉)
因为查找失败返回值是false,所以if条件加了“!”号。在找不到时弹出警告对话框。
源码: find02.rar