QDialog не вызывает функцию MainWindow - PullRequest
0 голосов
/ 06 марта 2012

Следующий код должен вызывать функцию 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 ]

2 голосов
/ 06 марта 2012

Это выглядит как ужасная попытка реализовать диалог ввода. Вы должны подать сигнал, подтверждающий, что пользователь сделал ввод, и подключить этот сигнал к соответствующему слоту в вашем MainWindow и подключить этот сигнал и слот в конструкторе вашего MainWindow. Кроме того, если вы просто получаете одну строку в модальном диалоговом окне, вам не следует изобретать велосипед, а вместо этого использовать QInputDialog .

1 голос
/ 06 марта 2012

Вы создаете новое (невидимое) главное окно и вызываете для него okbuttonclicked() вместо уже открытого. Вам необходимо передать существующее значение QMainWindow в диалоговое окно, если оно модально, это следует сделать, используя его в качестве родительского элемента диалогов. В противном случае создайте новый конструктор arg для его переноса.

0 голосов
/ 06 марта 2012

Грязно, но если ваше QMainWindow является родительским для вашего QDialog, вы можете сделать:

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