• 6475阅读
  • 5回复

对话框调用对话框 [复制链接]

上一主题 下一主题
离线lishuzheng
 

只看楼主 倒序阅读 楼主  发表于: 2008-01-03
对话框调用对话框
— 本帖被 XChinux 执行加亮操作(2008-07-17) —
我想在一个对话框中设置一个按钮,当点击这个按钮时,弹出我自己设计的一个对话框来,
程序入下,大家帮忙分析下,我运行后,点击按钮,结果没有反应!!!!

弹出对话框的头文件:
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <qdialog.h>
#include <qtextcodec.h>
#include <qlineedit.h>
class QCheckBox;
class QLabel;
class QPushButton;
class FindDialog : public QDialog
{
public:
    FindDialog(QWidget *parent = 0, const char *name = 0);
    QLineEdit *lineEdit;
private:
    QLabel *label;
        QPushButton *findButton;
    QPushButton *closeButton;
};
#endif

弹出对话框的cpp文件
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include "test3.h"

FindDialog::FindDialog(QWidget *parent, const char *name)
    : QDialog(parent, name)
{
    setCaption(tr("输入指令"));

    label = new QLabel(tr("输入您的指令:"), this);
    lineEdit = new QLineEdit(this);
 
    findButton = new QPushButton(tr("确定"), this);
    closeButton = new QPushButton(tr("取消"), this);
    connect(findButton, SIGNAL(clicked()),
            this, SLOT(accept()));
    connect(closeButton, SIGNAL(clicked()),
            this, SLOT(reject()));

    QHBoxLayout *topLeftLayout = new QHBoxLayout;
    topLeftLayout->addWidget(label);
    topLeftLayout->addWidget(lineEdit);

    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    leftLayout->addStretch(1); //30

    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(closeButton);
 
    QHBoxLayout *mainLayout = new QHBoxLayout(this);
    mainLayout->setMargin(11);
    mainLayout->setSpacing(6);
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
}
主对话框的头文件
#ifndef TRAIN_H
#define TRAIN_H
#include <qdialog.h>
#include <qpushbutton.h>
#include <qtextcodec.h>
#include <qlayout.h>
#include <qstring.h>
#include "test3.h"
class TrainDialog:public QDialog
{
    Q_OBJECT
    public:
    TrainDialog(QWidget *parent=0,const char *name=0);
    private slots:
    void save();
    private:
    QPushButton *keepButton;
    QString str;
 
};
#endif

主文件的cpp文件
#include "train.h"
TrainDialog::TrainDialog(QWidget *parent, const char *name)
    : QDialog(parent, name)
{
    setCaption(tr("对话框"));
    keepButton=new QPushButton(tr("保存"),this);
    str="";
    QVBoxLayout *Layout=new QVBoxLayout(this);
      Layout->addWidget(keepButton);
      connect(keepButton,SIGNAL(clicked()),this,SLOT(save()));
     
}
void TrainDialog::save()
{
   
    FindDialog dialog(this);
    if(dialog.exec())
    {
    str=dialog.lineEdit->text();
    }

}
main文件:
#include <qapplication.h>
#include "train.h"

int main(int argc,char **argv)
{
    QApplication app(argc,argv);
    app.setDefaultCodec(QTextCodec::codecForName("GBK"));
    TrainDialog *dialog=new TrainDialog;
    app.setMainWidget(dialog);
    dialog->show();
    return app.exec();
}
离线wangowen

只看该作者 1楼 发表于: 2008-01-04
FindDialog dialog(this),它的作用域只在save()函数里面,函数结束后,它会销毁的。当然就看不到了!
离线wangowen

只看该作者 2楼 发表于: 2008-01-04
不好意思,上面分析错误。
离线lishuzheng

只看该作者 3楼 发表于: 2008-01-04
但还是仍然谢谢您,那是什么错误?
离线xyz20032004

只看该作者 4楼 发表于: 2008-01-25
程序不能动态生成窗口, 在主程序中实现, 调用函数中显示
离线landuochong

只看该作者 5楼 发表于: 2008-01-25
dialog->show();
dialog->raise();加在dialog(this)后
快速回复
限100 字节
 
上一个 下一个