QWidget->show()之后,界面按钮无反应
时间: 2024-05-16 17:15:02 浏览: 11
可能是因为您没有设置按钮的事件处理函数。在Qt中,按钮点击事件被转换为`clicked`信号,您需要将该信号连接到槽函数中,以响应按钮的点击事件。
例如,您可以使用类似以下的代码来连接按钮的`clicked`信号和槽函数:
```cpp
connect(button, &QPushButton::clicked, this, &MyWidget::handleButtonClick);
```
其中,`button`是您的按钮对象,`MyWidget`是包含按钮的窗口类,`handleButtonClick`是您定义的槽函数,用于处理按钮的点击事件。请确保您的槽函数的参数列表与信号的参数列表匹配。
相关问题
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QDebug> #include<QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //登录 stu = new studentt; connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::logon); connect(stu,&studentt::RturnLogon,this,[=]{ stu->hide(); this->show(); }); //注册 User_Registers = new registers; connect(ui->pushButton_2,&QPushButton::clicked,this,&MainWindow::registerss); connect(User_Registers,®isters::Show_Main,this,[=](){ this->show(); User_Registers->hide(); }); ui->lineEdit_2->setEchoMode(QLineEdit::Password); } MainWindow::~MainWindow() { delete ui; } //数据库链接 void MainWindow::opensql() { db = QSqlDatabase::addDatabase("QODBC"); db.setPort(3306); db.setDatabaseName("sql"); db.setUserName("root"); db.setPassword("123456"); db.open(); } void MainWindow::logon() { //"select * from username where username like '1122' and password like '221'" QString s = "select * from username where username like \'"+ui->lineEdit->text()+"\'"+"and password like \'"+ ui->lineEdit_2->text()+"\'"; opensql(); qDebug()<<s; //账号密码传到数据库执行 result = db.exec(s); if (result.next()) { //判断权限 n = result.value("auth").toInt(); this->hide(); stu->show(); connect(this,&MainWindow::User_Name,stu,&studentt::set_UserName); emit User_Name(ui->lineEdit->text()); } else { QMessageBox::about(this,"提示","账号或密码输入错误请重新输入"); ui->lineEdit->clear(); ui->lineEdit_2->clear(); } } void MainWindow::registerss() { User_Registers->show(); this->hide(); } 分析
这是一个 Qt 框架下的 C++ 程序,主要实现了用户登录和注册的功能。
程序中包含了一个主窗口 MainWindow 和两个子窗口 studentt 和 registers。其中,MainWindow 作为程序的主要窗口,用于用户登录和注册操作,studentt 和 registers 作为子窗口,分别用于实现已登录用户的操作和新用户的注册。
程序中使用了 Qt 的信号与槽机制来实现窗口之间的通信,例如登录操作时,点击登录按钮会触发 MainWindow 中的 logon 函数,该函数会将用户输入的账号和密码传递到数据库中进行验证,如果验证通过则将权限信息保存在变量 n 中,同时隐藏 MainWindow 窗口并显示 studentt 窗口,将用户名传递给 studentt 窗口。
程序中还包含了一些 Qt 的界面控件,例如 QLineEdit 和 QPushButton,用于实现用户输入和按钮点击等操作。
此外,程序中还包含了一个 opensql 函数,用于连接数据库。
toolBtn1 = new QToolButton; toolBtn1->setText(tr("道枝小尧")); toolBtn1->setIcon(QPixmap(":/image/spqy.png")); toolBtn1->setIconSize(QPixmap(":/image/spqy.png").size()); toolBtn1->setAutoRaise(true); toolBtn1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); connect(toolBtn1, SIGNAL(clicked()), this, SLOT(showChatWidget1())); toolBtn2 = new QToolButton; toolBtn2->setText(tr("忆梦如澜")); toolBtn2->setIcon(QPixmap(":/image/ymrl.png")); toolBtn2->setIconSize(QPixmap(":/image/ymrl.png").size()); toolBtn2->setAutoRaise(true); toolBtn2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); connect(toolBtn2, SIGNAL(clicked()), this, SLOT(showChatWidget2()));创建登录界面
这里是一个简单的登录界面的代码示例:
```cpp
#include "loginwidget.h"
#include "ui_loginwidget.h"
#include <QMessageBox>
LoginWidget::LoginWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::LoginWidget)
{
ui->setupUi(this);
// 设置窗口标题
setWindowTitle(tr("登录"));
// 设置窗口图标
setWindowIcon(QIcon(":/image/icon.png"));
// 设置用户名和密码框的默认提示文本
ui->lineEditUsername->setPlaceholderText(tr("请输入用户名"));
ui->lineEditPassword->setPlaceholderText(tr("请输入密码"));
// 设置登录按钮的默认文本
ui->pushButtonLogin->setText(tr("登录"));
// 连接登录按钮的 clicked 信号到槽函数
connect(ui->pushButtonLogin, SIGNAL(clicked()), this, SLOT(onButtonLoginClicked()));
}
LoginWidget::~LoginWidget()
{
delete ui;
}
void LoginWidget::onButtonLoginClicked()
{
// 获取用户名和密码
QString username = ui->lineEditUsername->text();
QString password = ui->lineEditPassword->text();
// 判断用户名和密码是否为空
if (username.isEmpty() || password.isEmpty()) {
QMessageBox::warning(this, tr("警告"), tr("用户名和密码不能为空!"));
return;
}
// 在此处添加登录验证代码
// ...
// 如果验证通过,则关闭登录界面并显示主界面
hide();
// 这里可以创建并显示主界面,或者发送信号给主窗口进行处理
// ...
}
```
需要注意的是,这里的 `LoginWidget` 类继承自 `QWidget`,并且使用了 Qt Designer 创建的界面布局,需要在 `ui_loginwidget.h` 中声明界面控件的指针。另外,需要在 `.pro` 文件中添加对 `widgets` 模块的依赖:
```
QT += widgets
```
界面布局文件 `loginwidget.ui` 中包含一个 `QFormLayout`,用于布局用户名和密码框,以及一个 `QHBoxLayout`,用于布局登录按钮。需要将这些控件与代码中的指针进行绑定,例如:
```cpp
ui->lineEditUsername = new QLineEdit;
ui->formLayout->addRow(tr("用户名:"), ui->lineEditUsername);
```
最后,需要在 `main.cpp` 中创建并显示登录界面:
```cpp
#include "loginwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LoginWidget w;
w.show();
return a.exec();
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)