QDialog没有调用MainWindow函数

时间:2012-03-06 13:21:14

标签: c++ qt qdialog

以下代码应调用MainWindow函数,但不调用它。我正在使用QT IDE。

#include "itemdialog.h"
#include "ui_itemdialog.h"
#include "mainwindow.h"

ItemDialog::ItemDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ItemDialog)
{
    ui->setupUi(this);
    setWindowTitle("Status Dialog");

}

ItemDialog::~ItemDialog()
{
    delete ui;
}

void ItemDialog::on_pushButton_clicked()
{
    MainWindow *obj=new MainWindow;
    obj->okbuttonclicked(ui->lineEdit->text());
}

okbuttonclicked()函数在MainWindow中实现。此对话框不应该打开一个新窗口。它的功能只是将用户输入的内容返回给MainWindow函数。

此代码中存在什么问题。请帮助!

3 个答案:

答案 0 :(得分:2)

这看起来像是在实现输入对话框时的可怕尝试。您应发出一个信号,确认用户已输入,并将该信号连接到MainWindow中的正确插槽,并将该信号和插槽连接到MainWindow的构造函数中。此外,如果您只是在模态对话框中获得单个字符串,则不应重新发明轮子,而是使用QInputDialog

答案 1 :(得分:1)

您正在创建一个新的(不可见的)主窗口,并在其上调用okbuttonclicked()而不是已打开的窗口。您需要将现有的QMainWindow传递到对话框中,如果它是模态的,则应将其用作对话框父级。否则创建一个新的构造函数arg来携带它。

答案 2 :(得分:0)

很脏,但如果您的QMainWindow是您的QDialog的父级,您可以这样做:

void ItemDialog::on_pushButton_clicked()
{
    MainWindow *obj=qobject_cast<QMainWindow*>(parent());
    if (obj)
        obj->okbuttonclicked(ui->lineEdit->text());
}