两个qt窗口传值(以记事本查找为例)
来源:互联网 发布:windows自带软件 编辑:程序博客网 时间:2024/06/03 10:59
前两天用qt写了一个记事本程序, 其中要实现查找功能。我们都知道点击记事本的查找按钮, 是会弹出一个对话框,如下图:
这里我们可以看到有两个窗口,问题是怎么把查找对话框的内容传送到主窗口呢? 毕竟是主窗口要搜索textedit实现查找的功能。
这里有两种方法:
方法一:使用signal/slots机制,建立两个窗口mainwindow 和 finddialog, finddialog给mainwindow 传值
话不多说,直接贴代码:
finddialog.h
#ifndef FINDDIALOG_H#define FINDDIALOG_H#include <QDialog>#include <QTextDocument>#include "public_define.h"//#ifndef _MESSAGE_STRUCT_//#define _MESSAGE_STRUCT_//#endifnamespace Ui {class FindDialog;}class FindDialog : public QDialog{ Q_OBJECTpublic: explicit FindDialog(QWidget *parent = 0); ~FindDialog();signals: void SendFindText(QString &str); void SendFindText(struct message_info &struct_message_info);private slots: void on_pushButton_find_clicked(); void on_pushButton_cancel_clicked();private: Ui::FindDialog *ui; struct message_info m_stru_message_info;};#endif // FINDDIALOG_H
finddialog.cpp
#include "finddialog.h"#include "ui_finddialog.h"FindDialog::FindDialog(QWidget *parent) : QDialog(parent), ui(new Ui::FindDialog){ ui->setupUi(this);}FindDialog::~FindDialog(){ delete ui;}void FindDialog::on_pushButton_find_clicked(){ m_stru_message_info.str_message = ui->lineEdit->text(); m_stru_message_info.options = 0; if(ui->checkBox_case_sensitive->isChecked()) m_stru_message_info.options = m_stru_message_info.options | QTextDocument::FindCaseSensitively; if(ui->checkBox_whole_words->isChecked()) m_stru_message_info.options = m_stru_message_info.options | QTextDocument::FindWholeWords; if(ui->checkBox_backward->isChecked()) m_stru_message_info.options = m_stru_message_info.options | QTextDocument::FindBackward;// QString str_find_text = ui->lineEdit->text();// emit SendFindText(str_find_text); emit SendFindText(m_stru_message_info);}void FindDialog::on_pushButton_cancel_clicked(){ this->close();}
public_define.h
#ifndef PUBLIC_DEFINE_H#define PUBLIC_DEFINE_Hstruct message_info{ QString str_message; QTextDocument::FindFlags options;};#endif // PUBLIC_DEFINE_H
mainwindow.h
#include "finddialog.h"#include "public_define.h"public slots: void ShowFindText(QString &str); void ShowFindText(struct message_info &struct_message_info);private: Ui::MainWindow *ui; bool m_b_istitled; //判断文件是否保存 QString m_str_current_file; //当前文件名 FindDialog *m_p_obj_find_dialog;mainwindow.cpp
void MainWindow::ShowFindText(message_info &struct_message_info){ if(!ui->textEdit->find( struct_message_info.str_message , struct_message_info.options ) ) { QMessageBox::warning( this , tr("error") , tr("can not find %1").arg(struct_message_info.str_message)); m_p_obj_find_dialog->show(); return ; }}void MainWindow::on_actionFind_triggered(){// m_p_find_dialog->show(); m_p_obj_find_dialog->show();}MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); m_p_obj_find_dialog = new FindDialog(this); connect(m_p_obj_find_dialog , SIGNAL(SendFindText(message_info&)) , this , SLOT(ShowFindText(message_info&)) ); m_str_current_file = tr("untitled.txt"); this->setWindowTitle( m_str_current_file); m_b_istitled = false;}
注意:我没有把所有代码贴完。只是贴了相关代码。
方法二:直接在mainwindow中写代码添加dialog,让dialog,lineedit,pushbutoon成为mainwindow的类成员,而不是第一种方法中mainwindow和dialog平起平坐。
mainwindow.h
private: Ui::MainWindow *ui; bool m_b_istitled; //判断文件是否保存 QString m_str_current_file; //当前文件名 FindDialog *m_p_obj_find_dialog;// QDialog *m_p_find_dialog; //查找对话框// QLineEdit *m_p_find_line_edit; //查找单行文本控件// QPushButton *m_p_find_push_button; //查找按钮对话框};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);// m_p_find_dialog = new QDialog(this);// m_p_find_line_edit = new QLineEdit(this);// m_p_find_push_button = new QPushButton(this);// QVBoxLayout *p_find_layout = new QVBoxLayout(m_p_find_dialog);// m_p_find_push_button->setText(tr("find"));// p_find_layout->addWidget(m_p_find_line_edit);// p_find_layout->addWidget(m_p_find_push_button);// m_p_find_dialog->setWindowTitle(tr("find"));// connect(m_p_find_push_button , SIGNAL(clicked(bool)), this , SLOT(ShowFindText()) ); m_p_obj_find_dialog = new FindDialog(this);// connect(m_p_obj_find_dialog , SIGNAL(SendFindText(QString &)) , this , SLOT(ShowFindText(QString&)) ); connect(m_p_obj_find_dialog , SIGNAL(SendFindText(message_info&)) , this , SLOT(ShowFindText(message_info&)) ); m_str_current_file = tr("untitled.txt"); this->setWindowTitle( m_str_current_file); m_b_istitled = false;}
void MainWindow::ShowFindText(){ if(!ui->textEdit->find(m_p_find_line_edit->text ) ) { QMessageBox::warning( this , tr("error") , tr("can not find %1").arg(struct_message_info.str_message)); m_p_obj_find_dialog->show(); return ; }}
阅读全文
0 0
- 两个qt窗口传值(以记事本查找为例)
- (1)常规窗口在qt中对应的名称(以属性窗口为例)
- QT打开文件对话框和保存文件对话框介绍,以记事本为例
- 查找两个排序数组的中间值--以升序数组为例
- 创建指定程序的桌面快捷方式--以记事本为例
- 创建指定程序的桌面快捷方式--以记事本为例
- QT打开文件对话框和保存文件对话框介绍,以记事本为列
- Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例
- Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例
- 记事本窗口(界面)
- QT创建两个窗口(一个窗口包含另一窗口)
- 动态的创建窗口(以一个按钮为例)
- 查找ruby方法(以rails为例)
- Qt查找子窗口
- Qt查找子窗口
- QT-数据库操作(以MYSQL为例)
- Qt 读取数据库配置文件类(以MySQL为例)
- QT-数据库操作(以MYSQL为例)
- u-boot启动参数
- java中常见的异常,你都遇见过几个?
- Python实例浅谈之国际化支持
- C#打开保存txt文件
- POJ-1655 Balancing Act(树的重心)
- 两个qt窗口传值(以记事本查找为例)
- idea 中查看maven 依赖图并分析冲突
- 【模板】基础数论大全(链接)
- http://blog.csdn.net/ye1992/article/details/49998511
- struts和springMVC的区别分析
- Android-->build.gradle-->packagingOptions,splits
- Flink入门教程--File Systems(文件系统)
- 爬豆瓣网分析《敦刻尔克》这部电影值得我们花钱去看吗(2)
- React性能优化总结