以下代码应调用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函数。
此代码中存在什么问题。请帮助!
答案 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());
}