• 5521阅读
  • 6回复

QT下面能否从一个form调用另一个form,例如一个对话框调用另一个对话框 [复制链接]

上一主题 下一主题
离线yangshaoxing
 

只看楼主 倒序阅读 楼主  发表于: 2006-11-30
QT下面能否从一个form调用另一个form,例如一个对话框调用另一个对话框
例如:
第一个对话框:
dialog1.h:
#ifndef DIALOG1_H
#define DIALOG1_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
class Dialog1 : public QDialog
{
  Q_OBJECT
public:
  Dialog1();  
private:
  QPushButton *pushButton;
  QLabel *label;
private:
  void showdialog2();
};
#endif // DIALOG1_H
dialog1.cpp
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include "dialog1.h"
#include "dialog2.h"
Dialog1::Dialog1()
{
  pushButton = new QPushButton(this);
  pushButton->setGeometry(QRect(30, 240, 361, 23));
  label = new QLabel(this);
  label->setObjectName(QString::fromUtf8("label"));
  label->setGeometry(QRect(10, 10, 351, 71));
  QFont font;
  font.setPointSize(15);
  font.setBold(true);
  font.setWeight(75);
  label->setFont(font);
  setWindowTitle(QApplication::translate("Dialog1", "Dialog1", 0, QApplication::UnicodeUTF8));
  pushButton->setText(QApplication::translate("Dialog1", "click to show dialog2", 0, QApplication::UnicodeUTF8));
  label->setText(QApplication::translate("Dialog1", "this is dialog1.", 0, QApplication::UnicodeUTF8));
  QSize size(400, 300);
  size = size.expandedTo(minimumSizeHint());
  resize(size);
  connect(pushButton, SIGNAL(clicked()),this,SLOT(showdialog2));
}
void Dialog1::showdialog2()//在这里调用第二个对话框
{
Dialog2 dialog2;
dialog2.exec();
}
第二个对话框:
dialog2.h:
#ifndef DIALOG2_H
#define DIALOG2_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
class Dialog2 : public QDialog
{
  Q_OBJECT
public:
  Dialog2();  
private:
  QPushButton *pushButton;
  QLabel *label;
};
#endif // DIALOG2_H
dialog2.cpp:
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include "dialog2.h"
Dialog2::Dialog2()
{
  label = new QLabel(this);
  label->setGeometry(QRect(20, 10, 351, 61));
  QFont font;
  font.setPointSize(15);
  font.setBold(true);
  font.setWeight(75);
  label->setFont(font);
  pushButton = new QPushButton(this);
  pushButton->setGeometry(QRect(140, 220, 75, 23));
  setWindowTitle(QApplication::translate("Dialog2", "Dialog2", 0, QApplication::UnicodeUTF8));
  label->setText(QApplication::translate("Dialog2", "this is dialog2", 0, QApplication::UnicodeUTF8));
  pushButton->setText(QApplication::translate("Dialog2", "exit", 0, QApplication::UnicodeUTF8));
  QSize size(400, 300);
  size = size.expandedTo(minimumSizeHint());
  resize(size);
  connect(pushButton, SIGNAL(clicked()),this, SLOT(close()));
}
主程序:
main.cpp
#include <QApplication>
#include "dialog1.h"
int main(int argc, char *argv[])
{
  QApplication app(argc,argv);
  Dialog1 dialog1;
  return dialog1.exec();
}
项目:
dialog.pro:
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
HEADERS += dialog1.h dialog2.h
FORMS +=
SOURCES += dialog1.cpp dialog2.cpp main.cpp
是想从第一个对话框调用第二个对话框并显示界面出来。
[ 此贴被XChinux在2006-12-03 15:07重新编辑 ]
离线浪漫天使
只看该作者 1楼 发表于: 2006-11-30
请楼主搜索一下论坛的帖子,其他网友已经提到过相关的问题。
离线忘记业
只看该作者 2楼 发表于: 2006-12-01
利用信号与槽的方法可以解决!!
战胜不了诱惑的人,必将被诱惑所俘!
离线yangshaoxing

只看该作者 3楼 发表于: 2006-12-02
我把dialog1.h改为:
#ifndef DIALOG1_H
#define DIALOG1_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include "dialog2.h"
class QPushButton;
class QLabel;
class Dialog2;
class Dialog1 : public QDialog
{
  Q_OBJECT
public:
  Dialog1(QWidget *fck = 0);
private:
  QPushButton *pushButton;
  QLabel *label;
  Dialog2 *dialog2;
private:
  void showdialog2();
};
#endif // DIALOG1_H
把显示dialog2的函数改为:
void Dialog1::showdialog2()
{
//Dialog2 *dialog2;
dialog2=new Dialog2(this);
dialog2->show();

}
结果还是一样。上贴说利用信号与槽的方法可以解决,请问如何解决?
离线drifthat

只看该作者 4楼 发表于: 2006-12-02
楼上的兄弟,你首先得把showdialog2声明成slot,然后connect那句话也是错的,应该写成:
connect(pushButton, SIGNAL(clicked()),this,SLOT(showdialog2()));
离线忘记业
只看该作者 5楼 发表于: 2006-12-02
就是按4楼的哥们说的那样就可以了,在槽内将 dialog2实例化就行了
战胜不了诱惑的人,必将被诱惑所俘!
离线yangshaoxing

只看该作者 6楼 发表于: 2006-12-03
引用第4楼drifthat2006-12-02 16:13发表的“”:
楼上的兄弟,你首先得把showdialog2声明成slot,然后connect那句话也是错的,应该写成:
connect(pushButton, SIGNAL(clicked()),this,SLOT(showdialog2()));

照这个方法成功了,谢。
快速回复
限100 字节
 
上一个 下一个