我试图用以下内容制作一个程序:在MainWindow (QMainWindow)中,我有一个按钮AddUser,它打开一个辅助窗口(QDialog),在该窗口中,我有3个空格来编写要添加到程序中的名称、电子邮件和移动用户号码。我希望,在介绍了所有这些信息之后,我单击Add按钮,窗口关闭,我编写的信息将传递给位于MainWindow中的用户向量(向量用户),这样我就可以使用它了。我已经把所有的事情都做好了,只是那些我不能做的传递信息。我已经搜索过了,但是我刚刚找到了一个登录窗口(次要窗口在主窗口之前打开,在介绍数据之后,它关闭登录窗口并打开主窗口,保存这些信息)。我希望基本上是这样,但区别是当我单击MainWindow中的一个按钮时,第二个窗口就会打开。
但效果不太好有人能帮我吗?
我有以下代码(基于Login上下文代码):
adduserwindow.h (辅助窗口)
signals:
void add(const User & user);
adduserwindow.cpp
void AddUserWindow::on_button_addUser_clicked() // Add button after write the info
{
QString name = ui->text_name->text();
QString email = ui->text_email->text();
QString mobile = ui->text_mobile->text();
User u1(name.toStdString(),email.toStdString(),mobile.toStdString());
users_.push_back(u1);
emit add(u1);
}
mainwindow.h
public:
void setUser(const User &user);
private:
User mUser;
mainwindow.cpp
void MainWindow::on_button_adduser_clicked() // AddUser button in MainWindow
{
AddUserWindow adduser_window(this);
adduser_window.exec();
QObject::connect(&adduser_window, &AddUserWindow::add, [this](const User user) {
this->setUser(user);
this->show();
});
}
void MainWindow::setUser(const User& user)
{
mUser = user;
qDebug()<<mUser.toString(); //toString() is a method of User class to convert std::string to QString
}
我在User.h的末尾有这个:
Q_DECLARE_METATYPE(User)
发布于 2022-06-13 23:07:49
给未来的访客留个答案..。这里的问题是,在用户关闭对话框之前,QDialog的exec()函数不会返回。在这种情况下,简单的解决方案是在调用exec()之前进行任何信号连接。
但是,它的文档建议使用open(),或者为无模式对话框使用show()。这些函数都会立即返回,因此需要将对话框的生存期绑定到它的父窗口,方法是给它动态存储持续时间:
void MainWindow::on_button_adduser_clicked() // AddUser button in MainWindow
{
auto* adduser_window = new AddUserWindow(this);
QObject::connect(adduser_window, &AddUserWindow::add, [this](const User user) {
this->setUser(user);
this->show();
});
adduser_window.open();
}
这是一种惯用的Qt方式,我建议这样做,因为无论对话框(或其他QObject)实际是否会超过该函数,它都能工作。
https://stackoverflow.com/questions/72591704
复制相似问题