-3

下面的代码应该调用 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 函数。

这段代码有什么问题。请帮忙!

4

3 回答 3

2

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

于 2012-03-06T13:46:19.190 回答
1

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

于 2012-03-06T13:41:31.553 回答
0

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

void ItemDialog::on_pushButton_clicked()
{
    MainWindow *obj=qobject_cast<QMainWindow*>(parent());
    if (obj)
        obj->okbuttonclicked(ui->lineEdit->text());
}
于 2012-03-06T13:46:11.017 回答