尝试在主窗口中更新 QTableView,并将 QLineEdit 框的内容放在单独的文件中

问题描述 投票:0回答:1

这是我的(简化的)代码...

#include "dialog.h"
#include "ui_dialog.h"
#include "mainwindow.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

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

void Dialog::on_pushButton_clicked()
{
    ui->lineEdit->text();

    // Needs code here to update the table in the mainwindow file. But i cannot access the mainwindows table object...
    
    close();
}

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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


void MainWindow::on_actionadd_triggered()
{
    Dialog *dialog = new Dialog(this);
    dialog->show();
}

我尝试过“包含”适当的文件。我尝试从对话框文件(我评论过的地方)访问表对象,但没有任何乐趣。

请客气,我不太了解 C++ 或 Qt。 :-)

c++ qt
1个回答
0
投票

对象在单独的文件中定义这一事实是无关紧要的:当您的程序运行时,它们将存储在执行该程序的第一台机器的内存中,并且应该能够相互访问:您所需要的只是让您的对象之一“意识到”对方。

MainWindow
了解
Dialog
;事实上,这是创建指向
Dialog
实例的指针的地方。有了这些知识,您需要的是:

  1. dialog.h
    中,创建一个采用
    QString
    /
    QString
    引用作为参数的信号:
class Dialog {
Q_OBJECT
public:
// Your methods go here
public slots:
    void on_pushButton_clicked();
signals:
    void text_added(const QString&);
};
  1. mainwindow.h
    中,创建上述信号将触发的插槽。它需要以
    QString
    作为参数:
class MainWindow {
Q_OBJECT
public:
// Your methods go here
public slots:
    void on_actionadd_triggered();
    void on_dialog_text_added(const QString&);
};
  1. mainwindow.cpp
    中,定义插槽并将对话信号连接到它:
void MainWindow::on_actionadd_triggered()
{
    Dialog *dialog = new Dialog(this);
    connect(dialog, &Dialog::text_added, this, &MainWindow::on_dialog_text_added);
    dialog->show();
}

void MainWindow::on_dialog_text_added(const QString& text)
{
   // Here goes the instruction, for instance:
   // QAbstractItemModel* model = ui->Table->model();
   // model ->setData(model ->index(...), text, Qt::EditRole);
}
© www.soinside.com 2019 - 2024. All rights reserved.