我正在嘗試使用以下內容制作程式:在 MainWindow (QMainWindow) 中,我有一個 AddUser 按鈕,它打開了一個輔助視窗 (QDialog),其中我有 3 個空格來寫入要添加到的用戶的姓名、電子郵件和手機號碼程式。我想要這樣,在介紹完所有這些資訊后,我單擊添加按鈕,視窗關閉,我寫的資訊轉到位于 MainWindow 中的用戶向量 (vector<User> users),以便我可以使用它。我已經完成了所有這些事情,只是傳遞了我做不到的資訊。我已經搜索過它,但我只是發現了一個登錄視窗(輔助視窗在主視窗之前打開,在引入資料后它關閉登錄視窗并打開主視窗并保存該資訊)。
但是效果不好,有人可以幫幫我嗎?
我有這個代碼(基于登錄背景關系代碼):
adduserwindow.h(輔助視窗)
signals:
void add(const User & user);
添加用戶視窗.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);
}
主視窗.h
public:
void setUser(const User &user);
private:
User mUser;
主視窗.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
}
Obs:我在 User.h 的末尾有這個:
Q_DECLARE_METATYPE(User)
uj5u.com熱心網友回復:
只是為了給未來的訪客留下一個答案……這里的問題是 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://www.uj5u.com/yidong/491176.html
