从QDialog调用QMainWindow中的方法

我正在运行这个从主窗口显示对话窗口:

void SQLWindow::on_action_4_triggered()
{ 
   HeaderList window; 
   window.show(); 
   window.exec(); 
}

在这里,我试图将一个saveButtonClicked()连接到主窗口中的SLOT:

HeaderList::HeaderList(QWidget *parent) : QDialog(parent), ui(new Ui::HeaderList) 
{ 
   connect(this, SIGNAL(saveButtonClicked()), SQLWindow, SLOT(hideColumns())); 

   ui->setupUi(this); 
}

但得到一个错误:“预期的主要表达式之前”,“标记”指向“SQLWindow”。 显然,我做错了。 任何想法如何从对话框调用主窗口中的方法?


connect(...)中的第三个参数需要是一个指向实例的指针。 只需更改HeaderList的构造函数的签名并添加SQLWindow作为参数(+将TheDarkKnight提到的使用更新的connect方法调用):

HeaderList::HeaderList(SQLWindow *parent) : QDialog(parent), ui(new Ui::HeaderList)
{
    connect(this, &HeaderList::saveButtonClicked, parent, &SQLWindow::hideColumns);

    ui->setupUi(this);
}

在头文件中,将HeaderList构造函数显式化并且不使用nullptr重载父类将是一个好主意:

class HeaderList
{
public:
    explicit HeaderList(SQLWindow *parent);

    //...
};

将SQLWindow传递给HeaderList(并在提到的thuga中省略show()):

void SQLWindow::on_action_4_triggered()
{
    HeaderList window(this);
    window.exec();
}

反过来像这样连接信号:

class HeaderList
{
public:
    explicit HeaderList(QWidget *parent);

signals:
    void saveButtonClicked();
};

现在在SQLWindow

void SQLWindow::on_action_4_triggered()
{ 
   HeaderList window; 
   connect(&window, SIGNAL(saveButtonClicked()), this, SLOT(hideColumns()));
   window.exec(); 
}
链接地址: http://www.djcxy.com/p/39281.html

上一篇: Call method in QMainWindow from QDialog

下一篇: Allow Close Button on QMainWindow when QDialog is Open