故事发生在两天前因为项目需偠,在QT中的ui界面添加QComboBox控件需求是实现控件的点击事件,查了资料发现这个控件类的本身是没有点击信号可以使用的,提供的信号为
具體可以参考官方说明:
但是QT是基于C++的面向对象有了这个特点,我们就可以继承原来的类然后重写里面的方法来实现基类中没有的方法,比如clicked事件在QComboBox中添加鼠标点击事件的步骤为首先新建一个类(MyComboBox),继承QComboBox类然后在新建的类里面添加mousePressEvent事件,mousePressEvent是QT里面的鼠标点击事件直接就能用,接着在这个mousePressEvent事件函数里面触发自定义的clicked信号这样就实现在QComboBox里面实现鼠标点击的事件。
话不多说了直接上代码。
这样对QComboBox的重寫就完成了我们就可以使用具有鼠标点击响应的MyComboBox这个类了。在这里解释一下emitemit是QT里面的一个关键字,意思是触发一个信号这里的话是觸发我们在MyComboBox.h这个头文件中自定义的clicked信号。
那这个新建的MyComboBox应该怎么用呢且听我慢慢道来。
如果是想要在代码中直接新建的话就是通过平時的类的实例化就行。
这样实例化是没有绑定父组件的可以在父组件中通过addWidget的方式,添加这个新建的组件
也可以在实例化的时候绑定父组件,然后进行布局、位置、大小进行设置
那如果是直接在ui界面上面添加的话,那应该怎么使用呢
1、输入提升的类的名称
2、点击“添加”按钮,可以看到窗口的上面已经添加进入
现在我们ui中的QComboBox控件就有了鼠标点击响应事件了,在代码中就可以像按钮的点击事件那样使用 信号/槽机制来使用啦这里我还是举个例子来说明下吧。
我是在widget这个类里面使用的
1、在widge.h头文件里面添加槽函数的定义,这个槽函数嘚名字是我根据项目需求定义的
2、在widget.cpp中的构造函数中用connect来连接clicked信号和getPadIds槽函数,并且定义getPadIds槽函数为了测试,只是显示一句话在文本显示框中
当点击QComboBox控件时,就会触发自定义的clicked信号从而进入getPadIds槽函数,实现了QComboBox鼠标点击响应的功能
技术有限,如有错漏欢迎批评指正,谢謝
为了实现 QLineEdit 获取焦点/获取焦点后全選字符的功能在网上先查了 QLineEdit 获取焦点的方法,有两种:
1 此方法只有在窗体从失去焦点到获取焦点时有作用:即窗体失去焦点后再次获取焦点时将焦点置于某个 QLineEdit 中。
此功能明显不是偶想要的!!! 但由于网上现有的文章都是一样的说的不是很清楚,所以只有试了才知道
1) 在窗体初始化时增加如下代码:
1 // QLineEdit 获取焦点 1 - 此方法错误: 只有在窗体从失去焦点到获取焦点时有作用
2) 在窗体的 .h 文件中声明 SLOT,如下:
发布了0 篇原创文章 · 获赞 9 · 访问量 6万+