• 6237阅读
  • 5回复

问个新创建对话框的问题 [复制链接]

上一主题 下一主题
离线zz8318
 

只看楼主 倒序阅读 楼主  发表于: 2010-07-19
我想实现的功能是这样的:当前的对话框里面有一个radioButton,有一个pushButton,(都在Qt Designer里完成)当选中radioButton的时候,再按下pushButton的时候,就会弹出一个新的对话框。(不选中radioButton,按下pushButton是没反应的)
我写的大致代码如下:
********main函数***********
#include <QApplication>
#include "mydialog.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyDialog *mydialog = new MyDialog();
    mydialog->show();
    return app.exec();
}
******************************
 
*******mydialog.h***********
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
#include "seconddialog.h"
#include "ui_mydialog.h"
class MyDialog : public QDialog, public Ui::MyDialog
{
 Q_OBJECT
public:
     MyDialog();
private:
        SecondDialog *a;
private slots:
        void progress();
};
#endif 
******************************
 
*******mydialog.cpp********
#include <QtGui>
#include "mydialog.h"
MyDialog::MyDialog()
{
        setupUi(this);
        if(radioButton->isChecked())
              connect(pushButton, SIGNAL(clicked()), this, SLOT(progress()));
}
void MyDialog::progress()
{
        a = new SecondDialog();
}
******************************
 
********seconddialog.h*****
#ifndef SECONDDIALOG_H
#define SECONDDIALOG_H
#include <QDialog>
#include "ui_seconddialog.h"
class Test : public QDialog, public Ui::SecondDialog
{
 Q_OBJECT
public:
  SecondDialog();
};
#endif   
******************************
 
*******seconddialog.cpp****
#include <QtGui>
#include "seconddialog.h"
Test::Test()
{
 setupUi(this);
}
******************************
 
 
 
没有实现我上面所说的功能,有谁能教我一下吗,指导一下,谢谢
我说过的话,什么时候会有变化。
离线dbzhang800

只看该作者 1楼 发表于: 2010-07-19
引用楼主zz8318于2010-07-19 14:16发表的 问个新创建对话框的问题 :
        if(radioButton->isChecked())
              connect(pushButton, SIGNAL(clicked()), this, SLOT(progress()));


错误一,将你的 if 语句去掉!! connect 必须执行

引用楼主zz8318于2010-07-19 14:16发表的 问个新创建对话框的问题 :

void MyDialog::progress()
{
        a = new SecondDialog();
}


错误二,要将你的if放到这里面

错误三,对话框要显示,你必须调用 show 或 exec

错误四,内存泄露。(和你的new配对的delete在哪儿?)
离线zz8318

只看该作者 2楼 发表于: 2010-07-19
回 1楼(dbzhang800) 的帖子
太感谢了,我这个菜鸟刚开始学,呵呵,非常感谢你的指正
我说过的话,什么时候会有变化。
离线zz8318

只看该作者 3楼 发表于: 2010-07-19
回 1楼(dbzhang800) 的帖子
还想问个问题
我新建出来一个对话框mydialog,希望对话框里面有个label,有个progressbar
下面代码自己写的,但是弹出就一个空的对话框,没有label和progressbar

MyDialog::MyDialog()
{
    setGeometry(100, 100, 400, 300);
    label = new QLabel();
    label->setText("This is a dialog");
    label->setGeometry(QRect(10, 110, 100, 50));

    bar = new QProgressBar();
    bar->setGeometry(QRect(110, 110, 300, 30));
    bar->setValue(0);
能不能帮我指正,谢谢
我说过的话,什么时候会有变化。
离线dbzhang800

只看该作者 4楼 发表于: 2010-07-19
Re:回 1楼(dbzhang800) 的帖子
引用第3楼zz8318于2010-07-19 15:58发表的 回 1楼(dbzhang800) 的帖子 :
还想问个问题
我新建出来一个对话框mydialog,希望对话框里面有个label,有个progressbar
下面代码自己写的,但是弹出就一个空的对话框,没有label和progressbar
MyDialog::MyDialog()
.......


两个空的 () 内各加一个 this 。(建议你用QLayout,而不要用绝对坐标进行定位)


题外话:

要了解一点,new 和 delete 必须配对,不然就会内存泄露。当写new的时候,必须想着delete

或许你了解 Qt 的 QObject析构时 会清理它的children对象,用Qt的话,也要考清楚这一点,并理清和前一点的关系。
离线zz8318

只看该作者 5楼 发表于: 2010-07-19
回 4楼(dbzhang800) 的帖子
再次谢谢,呵呵
我会经常上这个论坛来学习的~
我说过的话,什么时候会有变化。
快速回复
限100 字节
 
上一个 下一个