本篇文章是对b站学习视频上面的一些总结与笔记,觉得这个视频还是不错的,值得花时间去听,那样才能更好的打好基础。共勉!这里也贴上一个这个视频的文档资料:https://pan.baidu.com/s/1x8dT6xorLa0jaNe8Wdd0IQ 提取码:8sdy
首先,对ui进行页面的基本布局:
基本上是这样的:
主要里面有四个Widget,然后进行一定的页面布局就可以 了。一般这里是都使用的是水平布局。
运行结果为:
那个弹簧是会没掉的,放心。
注意最下面那个滑竿。是自定义控件弄出来的。
首先:
你需要变在编辑
中编写一个类控件,例如这样:
#include "smallwidget.h"
#include
#include
#include
SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{
//这里就是自定义控件的用法
QSpinBox *spin = new QSpinBox(this);
QSlider *slider = new QSlider(Qt::Horizontal,this);
//把控件添加到布局中
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(spin);
hLayout->addWidget(slider);
setLayout(hLayout);
//注意,这里编写完成后,你还要在ui,界面那里把Widget提升为你要关联的那个类名,这样,
//你在这边编写的函数才能在ui那边进行显示,注意,选择确定的类就可以了。
}
编写完后,到ui界面就是控件提升:
具体操作如下:
先放一个widget:
右键点击:
选择下面的提升为,因为你是第一次提升。
然后把你自定义的类填写下去,点提升就可以了。
你就会出现,你编写的类中的东西了。
这时,你可能需要保证说两个控件的滑块数值改变的时候,相互关联。这时就用到connnect函数了
connect(spin,static_cast<void (QSpinBox::*) (int)>(&QSpinBox::valueChanged),slider,&QSlider::setValue);
connect(slider,&QSlider::valueChanged,spin,&QSpinBox::setValue);
注意观察函数的参数的类型,若有两种参数传值类型,就要进行强制类型转换了。类型转换主要方式为:static_cast
,与之类似。
主要代码
int i = ev->x();
int j = ev->y();
QString text=QString("Mouse Release:(%1,%2)
").arg(i).arg(j);
this->setText(text);
主要代码如下:
QString text=QString("Mouse Enter
");
this->setText(text);
主要代码如下:
static int sec = 0;
ui->label->setText(QString("Time out:%1
").arg((sec++)));
if(5==sec){
this->killTimer(this->timerId);
}
主要代码如下:
if(ev->button()==Qt::LeftButton)
{
qDebug()<<"left";
}
else if(ev->button()==Qt::RightButton){
qDebug()<<"right";
}
else if(ev->button()==Qt::MidButton){
qDebug()<<"Mid";
}
//搞这个,是要证明,在mywidget上面的signal被忽略了,
if(e->button()==Qt::LeftButton)
{
qDebug()<<"The pressed is left";
e->ignore();//忽略,事件继续往下传递,给谁传递。
//事件传递给了父组件,不是传递给父类(基类)
}
else {
//不做处理
}
//而如果这样做的话,就会回去再打印那个QWidget中的按钮的功能。
QPushButton::mousePressEvent(e);
其实这里,这样做不理解是正常的,我觉得用CloseEvent来解释,确实会好一点。
代码
void MyWidget::closeEvent(QCloseEvent *event)
{
int ret = QMessageBox::question(this,"question","whether need to close the window?");
if(ret ==QMessageBox::Yes){
//关闭窗口
//处理关闭窗口事件,接受事件,事件就不会再往下传递
event->accept();
}
else {
//不关闭窗口
event->ignore();
}
}
就是你要关闭的这个事件,用你接下来的QMessageBox的值来判断,进而得到是要忽略还是要关闭呢!
主要代码
://这是判定按键的,打印出来都是ASC2的值
void MyWidget::keyPressEvent(QKeyEvent *qe)
{
qDebug()<<qe->key();
if(qe->key()==Qt::Key_A){
qDebug()<<"Qt::key_A";
}
}
基本今天的内容就是这样了。
要运行的代码的话,我给一个那个网站所给的链接:
https://pan.baidu.com/s/10X7iEZGkpk3zWckEuI9YyQ 提取码:xgkj
直接在这里拿就行了,但好像是QT4的。运行不了,但代码都是对的,你可以试试看,有可能运行不了只是我的问题。