在C++中,可以使用信号和槽机制来实现功能界面和登录界面的连接。下面是一个简单的示例代码:
// 登录窗口
class LoginWindow : public QMainWindow {
Q_OBJECT
public:
LoginWindow(QWidget *parent = nullptr);
signals:
void loginSuccess(); // 定义登录成功信号
private slots:
void login(); // 处理登录按钮点击事件
private:
QLineEdit *usernameInput; // 用户名输入框
QLineEdit *passwordInput; // 密码输入框
QLabel *errorLabel; // 错误信息标签
};
LoginWindow::LoginWindow(QWidget *parent)
: QMainWindow(parent) {
// 初始化控件...
}
void LoginWindow::login() {
QString username = usernameInput->text();
QString password = passwordInput->text();
if (username == "admin" && password == "123456") {
emit loginSuccess(); // 发送登录成功信号
close(); // 关闭登录窗口
} else {
errorLabel->setText("Invalid username or password.");
}
}
// 功能窗口
class FunctionWindow : public QMainWindow {
public:
FunctionWindow(QWidget *parent = nullptr);
private slots:
void addProduct(); // 处理添加商品按钮点击事件
private:
LoginWindow *loginWin; // 登录窗口指针,用于连接信号和槽
QTableWidget *productTable; // 商品表格控件
};
FunctionWindow::FunctionWindow(QWidget *parent)
: QMainWindow(parent) {
loginWin = new LoginWindow;
productTable = new QTableWidget(this);
connect(loginWin, &LoginWindow::loginSuccess, this, &FunctionWindow::show); // 连接登录成功信号和功能窗口的显示函数
// 初始化控件...
}
void FunctionWindow::addProduct() {
if (!loginWin->isVisible()) {
loginWin->show(); // 如果登录窗口未显示,则显示登录窗口
}
// 处理添加商品逻辑...
}
在这个示例代码中,我们定义了一个loginSuccess()
信号,并在用户输入正确的用户名和密码并点击登录按钮时发送该信号。然后,在功能窗口中,我们创建了一个指向登录窗口对象的指针,并使用connect()
函数连接了loginSuccess()
信号和功能窗口的显示函数。当用户在功能窗口中点击添加商品按钮时,程序会判断登录窗口是否已经显示,如果没有则显示登录窗口;否则直接执行添加商品逻辑。
需要注意的是,在上述代码中,我们在FunctionWindow
类的构造函数中创建了一个新的LoginWindow
对象。如果您希望在应用程序运行过程中只有一个实例化的LoginWindow
对象,则可以将其作为成员变量传递给FunctionWindow
类,并在构造函数或其他地方进行初始化。