如何在两个窗口之间进行通信?

时间:2016-09-30 13:06:34

标签: qt qt5

我是Qt的新手。在Ubuntu 15.04上使用基于Qt 5.4.1的Qt Creator 3.1.1。

我尝试使用右侧的“添加”,“编辑”,“删除”和“导出”按钮构建一个在主屏幕上列出员工的应用程序。单击“添加”和“编辑”按钮,打开另一个子窗口并执行相应的操作。

一旦用户从子窗口添加/编辑/删除员工,我想在主窗口刷新员工列表。

我不想在单个文件中编写整个代码,因此根据屏幕分隔代码。但我不知道如何从子窗口访问父窗口UI元素。所以我使用以下代码从子文件中实现了这一点。

QTableWidget *tableWidget   = this->parent()->findChild<QTableWidget *>();
QSqlQuery query;
    query.exec("SELECT * FROM employees order by id DESC");

    tableWidget->setRowCount( 0 );
    tableWidget->setRowCount( query.size() );
    tableWidget->setColumnWidth( 0, 60 );
    tableWidget->setColumnWidth( 1, 200 );
    tableWidget->setColumnWidth( 2, 150 );
    tableWidget->setColumnWidth( 3, 100 );

    while( query.next() ) {

        tableWidget->setItem( columnCount, 0 ,new QTableWidgetItem( query.value(0).toString() ) );
        tableWidget->setItem( columnCount, 1 ,new QTableWidgetItem( query.value(1).toString() ) );
        tableWidget->setItem( columnCount, 2 ,new QTableWidgetItem( query.value(2).toString() ) );
        tableWidget->setItem( columnCount, 3 ,new QTableWidgetItem( query.value(3).toString() ) );

        columnCount++;
    }

click here for screenshot of application

这是实现此功能的正确方法吗?请指导我。谢谢。

1 个答案:

答案 0 :(得分:2)

你的辅助窗口只能发出一个信号,你连接到主窗口的插槽,那个插槽执行你那里的代码。

或者,如果这些额外的窗口是模态对话框(阻止用户在打开时与主窗口交互),那么只需在从exec()调用返回后触发更新