qmake提示:QDialog: 没有那个文件或目录

当遇到qmake报错QDialog: 没有那个文件或目录时,可能是因为使用了错误版本的qmake。通过使用`which qmake`找到正确的qmake路径,例如切换到qmake-qt4,可以解决此问题。了解`which`和`whereis`命令的用途也有助于定位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qmake提示:QDialog: 没有那个文件或目录

网上找原因,有人说是在用QT3 make QT4的代码程序,修改qmake执行文件的路径环境变量后OK了

用which qmake找到qmake在/usr/bin下,找到qmake和qmake-qt4两个可执行文件

用qmake-qt4就可以了。


附录

which命令的原理:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which命令的使用实例:

  $ which grep

whereis命令原理:只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

whereis命令的使用实例:

  $ whereis grep


这是.h:#ifndef USERINFODIALOG_H #define USERINFODIALOG_H #include <QDialog> namespace Ui { class UserInfoDialog; } class UserInfoDialog : public QDialog { Q_OBJECT public: explicit UserInfoDialog(const QString &username, QWidget *parent = nullptr); ~UserInfoDialog(); private slots: void on_btnSave_clicked(); private: Ui::UserInfoDialog *ui; QString m_username; // 当前登录的用户名 }; #endif // USERINFODIALOG_H 这是.cpp:#include "userinfodialog.h" #include "ui_userinfodialog.h" #include <QSettings> #include <QMessageBox> UserInfoDialog::UserInfoDialog(const QString &username, QWidget *parent) : QDialog(parent), ui(new Ui::UserInfoDialog), m_username(username) { ui->setupUi(this); setWindowTitle("完善用户信息"); // 设置年龄范围 ui->spinAge->setRange(1, 150); // 设置性别选项 ui->comboGender->addItems(QStringList() << "男" << "女" << "其他"); } UserInfoDialog::~UserInfoDialog() { delete ui; } void UserInfoDialog::on_btnSave_clicked() { QString name = ui->txtName->text().trimmed(); int age = ui->spinAge->value(); QString gender = ui->comboGender->currentText(); // 验证输入 if (name.isEmpty()) { QMessageBox::warning(this, "错误", "姓名不能为空"); return; } // 保存到QSettings QSettings settings("user_data.ini", QSettings::IniFormat); settings.beginGroup("UserInfo/" + m_username); // 使用UserInfo分组下的用户名作为子分组 settings.setValue("name", name); settings.setValue("age", age); settings.setValue("gender", gender); settings.endGroup(); settings.sync(); // 同步到文件 QMessageBox::information(this, "成功", "用户信息已保存"); accept(); // 关闭对话框 } 这是报错的登录.cpp#include "qlineedit.h" #include <QMessageBox> #include <QSettings> // 简单存储用 QSettings #include "loginwindow.h" #include "ui_loginwindow.h" #include "adminloginwindow.h" #include "userinfodialog.h" LoginWindow::LoginWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::LoginWindow) { ui->setupUi(this); registerWindow = nullptr; this->setWindowTitle("登录窗口"); loadUserData(); // 初始化加载一次 } LoginWindow::~LoginWindow() { delete ui; if(registerWindow) delete registerWindow; } // 加载存储的账号密码(简单版:用 QSettings 存储) void LoginWindow::loadUserData() { QSettings settings("login_data.ini", QSettings::IniFormat); settings.beginGroup("Users"); userData.clear(); foreach (const QString &key, settings.allKeys()) { userData.insert(key, settings.value(key).toString()); } settings.endGroup(); qDebug() << "当前用户数据:" << userData; } void LoginWindow::showEvent(QShowEvent *event) { QMainWindow::showEvent(event); loadUserData(); } void LoginWindow::on_pushButton_Login_clicked() { QString inputUser = ui->lineEdit_Account->text().trimmed(); QString inputPass = ui->lineEdit_Password->text().trimmed(); if (inputUser.isEmpty() || inputPass.isEmpty()) { QMessageBox::warning(this, "错误", "请输入账号密码"); return; } QSettings settings("login_data.ini", QSettings::IniFormat); settings.beginGroup("Users"); QStringList users = settings.childKeys(); // 获取所有用户 bool found = false; for (const QString &user : users) { if (user == inputUser && settings.value(user).toString() == inputPass) { found = true; break; } } settings.endGroup(); if (found) { QMessageBox::information(this, "成功", "登录成功!"); } else { QMessageBox::warning(this, "错误", "账号密码错误"); ui->lineEdit_Password->clear(); } if (authenticate(...)) { this->hide(); // 隐藏登录窗口 UserInfoDialog *userInfoDialog = new UserInfoDialog(this); // 指定父对象,这样当父对象销毁时,对话框也会销毁 // 者使用setAttribute(Qt::WA_DeleteOnClose); connect(userInfoDialog, &UserInfoDialog::finished, this, [this, userInfoDialog](int result) { // 当用户信息对话框关闭后,可以做一些处理,比如显示登录窗口退出 if (result == QDialog::Accepted) { // 用户信息保存成功,可以退出程序继续 this->close(); // 关闭登录窗口(程序退出) } else { // 用户取消了,重新显示登录窗口 this->show(); } userInfoDialog->deleteLater(); // 如果未设置WA_DeleteOnClose,则手动删除 }); userInfoDialog->show(); // 非模态显示 // 者使用模态:userInfoDialog->exec(); 但使用exec()则不需要连接finished信号,因为exec()是阻塞的 } }
07-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值