找回密码
 立即注册
收起左侧

Qt文本查找功能设计界面添加对话框实现遇到问题

2
回复
7042
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2018-10-26 22:25:06 显示全部楼层 |阅读模式
3Qter豆
教程中用代码实现一个简单的查找对话框
想用设计界面实现相同功能,添加了个QT设计师界面类,作为查找对话框SearchDialog

mainwindow.cpp中代码如下:
void MainWindow::on_action_Find_triggered()
{
    view = new SearchDialog(this) ;//将类指针实例化
   view->show();//显示弹出非模式对话框(不锁住主程序)
}


void MainWindow::showFindText()
{
    view = new SearchDialog(this) ;
    QString c = view->str;
    if(ui->textEdit->find(c,QTextDocument::FindBackward))//从光标前依次查找
        {
            // 查找到后高亮显示
            QPalette palette = ui->textEdit->palette();
            palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
            ui->textEdit->setPalette(palette);
        else
        {
            QMessageBox::information(this,tr("注意"),tr("没有找到内容%1").arg(c),QMessageBox::Ok);
        }


}


SearchDialog.cpp中代码如下:
void SearchDialog::on_findpushButton_clicked()
{
   str = ui->findlineEdit->text();
   parent = new MainWindow(this);
   parent->showFindText();
}


成员变量,成员函数都以公有声明
运行后查找一直显示没找到内容,求大神帮忙找出问题

回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-10-30 15:12:34 显示全部楼层
本帖最后由 baizy77 于 2018-10-30 15:14 编辑

您给出的代码的逻辑有点绕。
void MainWindow::showFindText()
{
    view = new SearchDialog(this) ;   
    QString c = view->str;
}
这里的view为什么需要重新new,如果用您的代码,那么view每次都是重新new的,因为没有MainWindow的构造函数代码,
我们只能推测,那么第二行代码中的c是不是永远为空?
是不是因为这个原因才查不到。

建议的修改:1, MainWindow构造函数中将view 保存下来。
2,
void MainWindow::showFindText()
{
   // view = new SearchDialog(this) ;  
   if (NULL == view) {
        return;
    }
}  

回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-11-1 09:10:18 显示全部楼层
baizy77 发表于 2018-10-30 15:12
您给出的代码的逻辑有点绕。
void MainWindow::showFindText()
{

已经解决啦,还是谢谢你的建议?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了