move doesn’t work for me when I create a widget, I give it the position of the previous window (not the parent), but it still doesn’t want to accept the position I need in Qt on Ubuntu, even though everything works on Windows
code:
if(query.next()){ // проверкарезультатазапроса QRect currentGeometry = this->geometry(); QWidget *loggetInWindow = createAccountWindow(userType, currentGeometry); if(loggetInWindow){ loggetInWindow->show(); loggetInWindow->move(this->x(), this->y()); } } else{ QMessageBox::warning(this, "Ошибкавхода", "Неверныйлогинилипароль."); }
I tried swapping show and move (I don’t know exactly which is correct) and nothing changed
supplemented code, LoginWindow is the first, initial window that opens immediately when the program starts, loggetInWindowthis second window opens after clicking the button
#include "ui_loginwindow.h" #include "registrationwindow.h" #include "loginwindow.h" #include "adminwindow.h" #include "clientwindow.h" #include "workerwindow.h" #include <QPropertyAnimation> #include <QtSql/QSqlDatabase> // дляподключениякбазеданных #include <QtSql/QSqlQuery> // длявыполениязапросовкбазеданных #include <QMessageBox> LoginWindow::LoginWindow(QWidget *parent) : QWidget(parent) , ui(new Ui::LoginWindow){ ui->setupUi(this); QComboBox *comboBox = ui->comboBox; comboBox->addItem("Клиент"); comboBox->addItem("Администратор"); comboBox->addItem("Работник");}LoginWindow::~LoginWindow(){ delete ui;}void LoginWindow::on_pushButton_login_clicked() // кнопкавход{ QString userType = ui->comboBox->currentText(); QString username = ui->lineEdit_username->text(); QString password = ui->lineEdit_password->text(); { QSqlDatabase db; if(QSqlDatabase::contains("loginConnection")){ db = QSqlDatabase::database("loginConnection"); if(!db.open()){ qDebug() << "Failed open database LoginWindow\n"; return; } } else{ db = QSqlDatabase::addDatabase("QMYSQL", "loginConnection"); db.setHostName("localhost"); db.setUserName("zxctatar"); db.setDatabaseName("zxctatar"); if(!db.open()){ qDebug() << "Failed open database LoginWindow\n"; return; } } if(ui->lineEdit_username->text().length() == 0){ QMessageBox::warning(this,"LoginWindow","Введителогин"); return; } if(ui->lineEdit_password->text().length() == 0){ QMessageBox::warning(this,"Пароль", "Введитепароль"); return; } QSqlQuery query(db); if(userType == "Клиент"){ query.prepare("SELECT * FROM Клиент WHERE Логин = :login AND Пароль = :password"); } else if(userType == "Администратор"){ query.prepare("SELECT * FROM Администратор WHERE StrComp(Логин, :login, 0) = 0 AND StrComp(Пароль, :password, 0) = 0"); } else if(userType == "Работник"){ query.prepare("SELECT * FROM Работник WHERE StrComp(Логин, :login, 0) = 0 AND StrComp(Пароль, :password, 0) = 0"); } else{ qDebug() << "Unknown user type\n"; db.close(); return; } query.bindValue(":login", username); query.bindValue(":password", password); if (!query.exec()){ qDebug() << "Failed query\n"; db.close(); return; } if(query.next()){ // проверкарезультатазапроса QRect currentGeometry = this->geometry(); QWidget *loggetInWindow = createAccountWindow(userType, currentGeometry); if(loggetInWindow){ loggetInWindow->show(); loggetInWindow->move(this->x(), this->y()); } } else{ QMessageBox::warning(this, "Ошибкавхода", "Неверныйлогинилипароль."); } db.close(); } QSqlDatabase::removeDatabase("loginConnection");}QWidget* LoginWindow::createAccountWindow(const QString& userType, const QRect& geometry){ // проверкакакоеокносоздать QWidget *loggedInWindow = nullptr; if(userType == "Клиент"){ loggedInWindow = new ClientWindow(ui->lineEdit_username->text()); loggedInWindow->setAttribute(Qt::WA_DeleteOnClose); } else if(userType == "Администратор"){ loggedInWindow = new AdminWindow(); loggedInWindow->setAttribute(Qt::WA_DeleteOnClose); } else if(userType == "Работник"){ loggedInWindow = new WorkerWindow(ui->lineEdit_username->text()); loggedInWindow->setAttribute(Qt::WA_DeleteOnClose); } if(loggedInWindow){ loggedInWindow->setGeometry(geometry); loggedInWindow->setWindowOpacity(0.0); loggedInWindow->show(); } return loggedInWindow;}void LoginWindow::on_pushButton_registration_clicked(){ RegistrationWindow* regWindow = new RegistrationWindow(this); regWindow->setAttribute(Qt::WA_DeleteOnClose); regWindow->show(); connect(regWindow, &RegistrationWindow::windowClosed, this, [=](){ delete regWindow; });}
minimal reproducible example
#include "mainwindow.h"#include <QScreen>#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; QScreen *primaryScreen = QGuiApplication::primaryScreen(); QRect availableGeometry = primaryScreen->availableGeometry(); int x = (availableGeometry.width() - w.width()) / 2; int y = (availableGeometry.height() - w.height()) / 2; w.move(x,y); w.show(); return a.exec();}