Qt学习笔记(6月)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33559992/article/details/80766102

QT学习笔记(6月)

1. Qt qojbect_cast的使用

函数原型:

T qobject_cast ( QObject * object )

本方法返回object向下的转型T,如果转型不成功则返回0,如果传入的object本身就是0则返回0。
在使用时有两个限制:

  1. T类型必须继承自QObject。
  2. 在声明时必须有Q_OBJECT宏。

官方例子如下:

QObject *obj = new QTimer;          // QTimer inherits QObject

 QTimer *timer = qobject_cast<QTimer *>(obj);
 // timer == (QObject *)obj

 QAbstractButton *button = qobject_cast<QAbstractButton *>(obj);
 // button == 0 <br>

使用场景:
当某一个Object emit一个signal的时候,它就是一个sender,系统会记录下当前是谁emit出这个signal的,
所以你在对应的slot里就可以通过 sender()得到当前是谁invoke了你的slot。
有可能多个 Object的signal会连接到同一个signal(例如多个Button可能会connect到一个slot函数onClick()),
因此这是就 需要判断到底是哪个Object emit了这个signal,根据sender的不同来进行不同的处理.

在槽函数中:

QObject * obj = sender(); //返回发出信号的对象,用QObject类型接收

QPushButton *button_tmp = qobject_cast<QPushButton *>(obj);  //向下转型为按钮类型
//...对此按钮的其他操作

2. 自定义日历控件

在网上看到一个实现自定义的日历控件(当然还有其他更好的方案)。主要是,该自定义控件还可以设置时间,效果如图所示:
这里写图片描述
刚好项目中需要设置日期与时间,Qt自带的QDateTimeEdit不可恭维。为此选择自定义该控件,继承QDateTimeEdit。
具体见附件DefDateTimeEdit
使用方法如下:

m_defDateTimeEdit = new DefDateTimeEdit(ui->tab);
m_defDateTimeEdit->setMinimumWidth(175);

3. 按钮绑定键盘快捷键

pushButton_login->setShortcut(Qt::Key_Enter);//将字母区回车键与登录按钮绑定在一起

4. Qt弹窗不能指定父类

在一个项目需要实现点击一个按钮实现弹出另外一个对话框。由于在新建对象的时候,手贱指定了父类指针this.结果使得新建对象的窗体嵌在了已有的窗体中。如图:

m_password = new ChangePassword(this);
m_password->show();

这里写图片描述
最终取消指定的父类this。直接

m_password = new ChangePassword;
m_password->show();

原型为:
ChangePassword(QWidget *parent = 0);
其中QWidget *parent = 0 表示ChangePassword控件不是任何控件的子控件。因此对window来说他是一个单独的控件,可以实现弹出窗体。
其中这篇博文讲述了继承QWidget的对象,什么时候是一个窗体,什么时候是一个控件。完全取决于parent 是什么。
漫谈QWidget及其派生类(一)

猜你喜欢

转载自blog.csdn.net/qq_33559992/article/details/80766102
今日推荐