找回密码
 立即注册
收起左侧
楼主: yafeilinux

第3篇 基础(三)Qt登录对话框

142
回复
170174
查看
  [复制链接]
累计签到:1608 天
连续签到:1 天
2013-10-14 22:54:16 显示全部楼层
心寒若冰 发表于 2013-10-14 16:20
yafeilinux老师,还有个问题,我的界面中有三个lineEdit,但是通过界面上的数字按键输入时,想区别目前哪 ...

可以使用例如ui->lineEdit01->hasFocus()这样的方式来判断,

不过,一般你点击按钮的时候,按钮就会获得焦点,这个函数就没有效果了。

所以需要在构造函数里面先让所有按钮都不获取焦点,例如:
ui->pushButton->setFocusPolicy(Qt::NoFocus);

回复 支持 反对

使用道具 举报

累计签到:609 天
连续签到:1 天
2013-10-15 09:45:42 显示全部楼层
yafeilinux 发表于 2013-10-14 22:54
可以使用例如ui->lineEdit01->hasFocus()这样的方式来判断,

不过,一般你点击按钮的时候,按钮就会获得 ...

非常感谢,之前只设置过hasFocus()函数,没想到还要对pushbutton进行设置,长知识了。另外,我想实现在鼠标点击多个lineEdit进行切换时,可以实现lineEdit其背景色改变,想通过信号槽函数实现,可是lineEdit没有对应的信号函数,有没有好的解决方案呢??
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2013-10-15 11:48:12 显示全部楼层
心寒若冰 发表于 2013-10-15 09:45
非常感谢,之前只设置过hasFocus()函数,没想到还要对pushbutton进行设置,长知识了。另外,我想实现在鼠 ...

这个可以通过样式表来实现,设置鼠标点击时更改颜色。
回复 支持 反对

使用道具 举报

累计签到:609 天
连续签到:1 天
2013-10-15 15:37:49 显示全部楼层
yafeilinux 发表于 2013-10-15 11:48
这个可以通过样式表来实现,设置鼠标点击时更改颜色。

样式表中selection-background-color函数是在选中某个lineEdit中的文字时,文字背景色高亮,我想实现的是选中某个lineEdit框时,该框背景色高亮。样式表没有找到鼠标点击时更改颜色的选项啊?
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2013-10-15 19:15:17 显示全部楼层
心寒若冰 发表于 2013-10-15 15:37
样式表中selection-background-color函数是在选中某个lineEdit中的文字时,文字背景色高亮,我想实现的是 ...

在cursorPositionChanged信号对应的槽里面改就可以了
回复 支持 反对

使用道具 举报

累计签到:94 天
连续签到:1 天
2013-11-25 13:32:34 显示全部楼层
学习了,谢谢楼主分享~~~
回复 支持 反对

使用道具 举报

累计签到:56 天
连续签到:1 天
2013-12-28 17:25:56 显示全部楼层
ui->usrLineEdit->text().trimmed() == tr("yafeilinux")
啥时候用->啥时候用.?
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2014-1-9 22:11:33 显示全部楼层
xinkexue 发表于 2013-12-28 17:25
ui->usrLineEdit->text().trimmed() == tr("yafeilinux")
啥时候用->啥时候用.?

简单来说指针用->,而普通变量用.

这个是C++的知识,在Qt Creator中直接按下.按键,会根据实际情况自动生成.或者->的。
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-3-2 20:09:19 显示全部楼层
我想问一下,我用的是VS2010,右键登陆按钮时没有“转到槽。。。”这个选项怎么办?
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2014-3-3 11:15:01 显示全部楼层
WpKeane 发表于 2014-3-2 20:09
我想问一下,我用的是VS2010,右键登陆按钮时没有“转到槽。。。”这个选项怎么办? ...

这个是Qt Creator设计器中才有的。没有的话就只能写代码了。

但是如果是初学者,估计很难完成。

建议还是先使用Qt Creator吧,等以后再用vs
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-3-3 17:55:45 显示全部楼层
yafeilinux 发表于 2014-3-3 11:15
这个是Qt Creator设计器中才有的。没有的话就只能写代码了。

但是如果是初学者,估计很难完成。

我试着在头文件中定义按钮点击函数,然后在源文件中实现,好像也可以!主要我最终是要将以前用MFC写的软件重新在Qt中实现,就选择用VS了!
回复 支持 反对

使用道具 举报

累计签到:11 天
连续签到:1 天
2014-3-4 17:30:23 显示全部楼层
你好!我在右键点击登录,选择转到槽,选择clicked()后会弹出来一个对话框:找不到符合“ui_LoginDialog.h”的文档。这该怎么解决啊!我是新手,不会弄
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2014-3-4 21:44:36 显示全部楼层
Masterzhoujun 发表于 2014-3-4 17:30
你好!我在右键点击登录,选择转到槽,选择clicked()后会弹出来一个对话框:找不到符合“ui_LoginDialog.h ...

只能说明没有按照步骤来。

也可以下载最后面的源码测试。
回复 支持 反对

使用道具 举报

累计签到:12 天
连续签到:1 天
2014-3-24 13:48:45 显示全部楼层
话说accept()函数到底是做什么的呢?
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2014-3-25 18:08:09 显示全部楼层
本帖最后由 cathyi 于 2014-3-26 18:42 编辑

亚飞老师我有三个问题,
1.,
  1.          w.show();
  2.         return a.exec();
复制代码
中,w.show()函数为什么没有一闪而过?是a.exec()将窗口保持了?不太明白a.exec()的作用。
2.
  1. void LoginDialog::on_loginButton_clicked()
  2. {
  3.     if(ui->userlineEdit->text()==tr("fsy")&&ui->pwdlineEdit->text()==tr("love"))
  4.    {
  5.         accept();
  6.     }
  7.     else{
  8.         QMessageBox::warning(this, tr("Waring"),
  9.                             tr("user name or password error!"),QMessageBox::Yes,QMessageBox::No);


  10.         if(QMessageBox::Yes)// 清空内容并定位光标
  11.        {
  12.         ui->userlineEdit->clear();
  13.         ui->pwdlineEdit->clear();
  14.         ui->userlineEdit->setFocus();
  15.         }
  16.         else
  17.            {
  18.             close();
  19.         }
  20.     }
  21. }
复制代码
如何在这段代码里实现点yes清除,点no关闭QMessageBox 和logindialog?
3.
  1. void LoginDialog::on_userlineEdit_returnPressed()
  2. {
  3.     ui->pwdlineEdit->setFocus();
  4. }
复制代码
这里希望在用户名输完后按enter键能focus到pwdlineEdit,这里按enter直接跳到了messagebox了,问题在哪?是否是操作不对?

点评

问题1,模态对话框和非模态对话框区别  详情 回复 发表于 2016-9-29 18:51
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2014-3-28 20:39:56 显示全部楼层
cathyi 发表于 2014-3-25 18:08
亚飞老师我有三个问题,
1.,中,w.show()函数为什么没有一闪而过?是a.exec()将窗口保持了?不太明白a.exe ...

第一,之所以w.show()可以显示而没有一闪而过,是因为a.exe()的原因,这个是事件循环。你可以这样理解:普通函数里面w.show()一闪而过,是因为普通函数执行完了;但是现在是在main()函数中,它永远不会退出。

第二,不想显示哪个按钮,不添加就行了,就是在调用QMessageBox的时候不要写QMessageBox::Yes即可。

第三,这个看上去是没有问题的,应该这么做,但是你的程序没有实现想要的效果,需要自己看下是哪里设置出现的问题。
回复 支持 反对

使用道具 举报

尚未签到

2014-6-16 15:36:57 显示全部楼层
真的很不错,每天一步一步进阶吧
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-7-4 18:12:30 显示全部楼层
为什么看不见图片
回复 支持 反对

使用道具 举报

累计签到:1608 天
连续签到:1 天
2014-7-4 21:07:55 显示全部楼层
aa88158859 发表于 2014-7-4 18:12
为什么看不见图片

登陆以后应该可以看到的
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-7-5 13:28:05 显示全部楼层
在主界面设置一个按钮名字为注销 按下返回到登录对话框   

void MainWindow:n_pushButton_clicked()
{
    LoginDialog *dlg=new LoginDialog(this);
    dlg->show();

}
这样子不能把主界面关闭 有什么方法可以实现?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了