当前位置: 首页 > news >正文

网页界面设计特点百度禁止seo推广

网页界面设计特点,百度禁止seo推广,找个不能粘贴文字的网站做实验,如何做自助搜券网站本章要实现的整体效果如下: QT 中使用定时器,有两种方式: 定时器类:QTimer定时器事件:QEvent::Timer,对应的子类是 QTimerEvent 本节通过一个案例,同时讲解这两种方式 案例:当点击…

本章要实现的整体效果如下:

整体效果

QT 中使用定时器,有两种方式:

  • 定时器类:QTimer
  • 定时器事件:QEvent::Timer,对应的子类是 QTimerEvent

本节通过一个案例,同时讲解这两种方式

案例:当点击 “开始” 按钮,两个标签同时向右移动,下边标签的定时间隔是上边标签的 2 倍,因此移动慢。当两个标签移动到最右侧时,回到最右端循环移动,整体效果,如下:


1. 定时器事件 QTimerEvent

1.1 界面布局

把两个标签以及 “启动”、“停止”、“复位” 三个按钮布局在界面上。

首先,来到 timer_widget.h,声明两个标签:

#include <QLabel>class TimerWidget : public QWidget
{
private:QLabel* lbl1;QLabel* lbl2;
};

然后,来到 timer_widget.cpp ,添加两个标签:

#include <QPushButton>TimerWidget::TimerWidget(QWidget* parent) : QWidget{parent}
{QVBoxLayout* verticalLayout = new QVBoxLayout(this);verticalLayout->setSpacing(0);verticalLayout->setContentsMargins(0, 0, 0, 0);// 1. 添加第一个QLabellbl1 = new QLabel(this);lbl1->setText("");lbl1->setFrameShape(QFrame::Box);lbl1->setFixedSize(100, 100);lbl1->setStyleSheet("background-color: red;");verticalLayout->addWidget(lbl1);// 2. 添加第二个QLabellbl2 = new QLabel(this);lbl2->setText("");lbl2->setFrameShape(QFrame::Box);lbl2->setFixedSize(100, 100);lbl2->setStyleSheet("background-color: blue;");verticalLayout->addWidget(lbl2);// 3. 添加按钮的水平布局QHBoxLayout* horizontalLayout = new QHBoxLayout(this);horizontalLayout->setSpacing(0);horizontalLayout->setContentsMargins(0, 0, 0, 0);QPushButton* btnStart = new QPushButton(this);btnStart->setText("开始");horizontalLayout->addWidget(btnStart);QPushButton* btnStop = new QPushButton(this);btnStop->setText("停止");horizontalLayout->addWidget(btnStop);QPushButton* btnReset = new QPushButton(this);btnReset->setText("复位");horizontalLayout->addWidget(btnReset);verticalLayout->addLayout(horizontalLayout);this->setStyleSheet(R"(QPushButton {font-size: 22px;})");
}

此时运行程序,效果如下:

运行效果


1.2 关联信号槽

首先,来到 timer_widget.h,声明 3 个槽函数

class TimerWidget : public QWidget
{
private slots:void onStartClicked();void onStopClicked();void onResetClicked();
};

然后,来到 timer_widget.cpp,做一个空实现:

void TimerWidget::onStartClicked()
{
}void TimerWidget::onStopClicked()
{
}void TimerWidget::onResetClicked()
{
}

最后,来到 timer_widget.cpp,在构造中连接信号槽:

TimerWidget::TimerWidget(QWidget* parent) : QWidget{parent}
{// ...connect(btnStart, &QPushButton::clicked, this, &TimerWidget::onStartClicked);connect(btnStop, &QPushButton::clicked, this, &TimerWidget::onStopClicked);connect(btnReset, &QPushButton::clicked, this, &TimerWidget::onResetClicked);
}

1.3 重写 timerEvent

当定时时间到,就会自动调用 timerEvent() 函数。

首先,来到 timer_widget.h 中,声明 timerEvent() 函数,并声明两个定时器 id

class TimerWidget : public QWidget
{
protected:void timerEvent(QTimerEvent* event);private:int id1;int id2;
};

然后,来到 timer_widget.cpp 中,实现 timerEvent() 函数:

void TimerWidget::timerEvent(QTimerEvent* event)
{//    qDebug() << "timerEvent";if ( event->timerId() == id1 ) {lbl1->move(lbl1->x() + 5, lbl1->y());if ( lbl1->x() >= this->width() ) {lbl1->move(0, lbl1->y());}} else if ( event->timerId() == id2 ) {lbl2->move(lbl2->x() + 5, lbl2->y());if ( lbl2->x() >= this->width() ) {lbl2->move(0, lbl2->y());}}
}

说明:

  • timerEvent() 函数中,向右移动标签。当标签超出当前窗口,重新回到最左侧
  • 可以启动多个定时器,在 timerEvent() 中,使用 QTimerEvent 类的 timerId() 函数可以获取哪个定时器定时时间到

1.4 实现槽函数,启动定时器

上一步中提到,定时时间到时,移动标签,那么就需要先启动定时器,并指定一个定时间隔。

首先,在 “启动” 按钮的槽函数中,启动定时器:

void TimerEventWidget::onStartClicked()
{id1 = startTimer(10); // 时间间隔10msid2 = startTimer(20); // 时间间隔20ms
}

然后,在 “停止” 按钮的槽函数中,停止定时器:

void TimerEventWidget::onStopClicked()
{killTimer(id1);killTimer(id2);
}

最后,在 “复位” 按钮的槽函数中,复位标签位置到最左侧:

void TimerEventWidget::onResetClicked()
{lbl1->move(0, lbl1->y());lbl2->move(0, lbl2->y());
}

此时运行,点击按钮,效果如下:

timerEvent


2. 定时器类 QTimer

接下来,使用定时器类 QTimer 来实现以上同样的效果

首先,在 timer_widget.h 声明两个定时器类的对象,以及定时超时的槽函数:

#include <QTimer>class TimerWidget : public QWidget
{
private slots:void onTimeout1();void onTimeout2();private:QTimer* timer1;QTimer* timer2;
};

然后,在 timer_widget.cpp 中实现两个定时超时槽函数:

void TimerWidget::onTimeout1()
{lbl1->move(lbl1->x() + 5, lbl1->y());if ( lbl1->x() >= this->width() ) {lbl1->move(0, lbl1->y());}
}void TimerWidget::onTimeout2()
{lbl2->move(lbl2->x() + 5, lbl2->y());if ( lbl2->x() >= this->width() ) {lbl2->move(0, lbl2->y());}
}

这里移动标签,并在标签超出当前窗口边界时,复位到最左侧


接着,修改 “启动”、“停止” 按钮的槽函数。

为便于切换定时器类和定时器事件这两种方式,定义了一个宏:

#define USE_TIMER_EVENTvoid TimerWidget::onStartClicked()
{
#ifdef USE_TIMER_EVENTid1 = startTimer(10);id2 = startTimer(20);
#elsetimer1->start(20);timer2->start(10);
#endif
}void TimerWidget::onStopClicked()
{
#ifdef USE_TIMER_EVENTkillTimer(id1);killTimer(id2);
#elsetimer1->stop();timer2->stop();
#endif
}

最后,在 timer_widget.cpp 的构造中创建定时器,并关联槽函数:

TimerWidget::TimerWidget(QWidget* parent) : QWidget{parent}
{// ...timer1 = new QTimer(this);connect(timer1, &QTimer::timeout, this, &TimerWidget::onTimeout1);timer2 = new QTimer(this);connect(timer2, &QTimer::timeout, this, &TimerWidget::onTimeout2);
}

此时,运行效果如下:

运行效果


文章转载自:
http://pyridine.qnzk.cn
http://aestivate.qnzk.cn
http://illiterati.qnzk.cn
http://appal.qnzk.cn
http://voroshilovgrad.qnzk.cn
http://nanna.qnzk.cn
http://eyewater.qnzk.cn
http://preposition.qnzk.cn
http://peshitta.qnzk.cn
http://semicircular.qnzk.cn
http://absurdism.qnzk.cn
http://mortification.qnzk.cn
http://rightism.qnzk.cn
http://gigantism.qnzk.cn
http://antioch.qnzk.cn
http://intenerate.qnzk.cn
http://meccano.qnzk.cn
http://cement.qnzk.cn
http://gymnorhinal.qnzk.cn
http://eupneic.qnzk.cn
http://nosepipe.qnzk.cn
http://plaintful.qnzk.cn
http://choreopoem.qnzk.cn
http://noneffective.qnzk.cn
http://tampon.qnzk.cn
http://shiva.qnzk.cn
http://maquisard.qnzk.cn
http://niue.qnzk.cn
http://haemostatic.qnzk.cn
http://rubor.qnzk.cn
http://rejectee.qnzk.cn
http://euclidean.qnzk.cn
http://davey.qnzk.cn
http://switchman.qnzk.cn
http://wrath.qnzk.cn
http://widen.qnzk.cn
http://dreadnaught.qnzk.cn
http://aspectant.qnzk.cn
http://boatel.qnzk.cn
http://acquittal.qnzk.cn
http://midafternoon.qnzk.cn
http://thermojunction.qnzk.cn
http://micromesh.qnzk.cn
http://erysipeloid.qnzk.cn
http://abortive.qnzk.cn
http://immortally.qnzk.cn
http://presbyterial.qnzk.cn
http://chuffed.qnzk.cn
http://heilung.qnzk.cn
http://fagin.qnzk.cn
http://clary.qnzk.cn
http://vorticity.qnzk.cn
http://vaginated.qnzk.cn
http://valspeak.qnzk.cn
http://flabby.qnzk.cn
http://splatter.qnzk.cn
http://sternness.qnzk.cn
http://quezon.qnzk.cn
http://headgear.qnzk.cn
http://aristate.qnzk.cn
http://inseparably.qnzk.cn
http://puriform.qnzk.cn
http://impervious.qnzk.cn
http://leadwort.qnzk.cn
http://redshank.qnzk.cn
http://transfusion.qnzk.cn
http://railophone.qnzk.cn
http://miry.qnzk.cn
http://incised.qnzk.cn
http://christolatry.qnzk.cn
http://emulsification.qnzk.cn
http://solidness.qnzk.cn
http://glower.qnzk.cn
http://praxiology.qnzk.cn
http://experienced.qnzk.cn
http://ultracytochemistry.qnzk.cn
http://actinometry.qnzk.cn
http://vad.qnzk.cn
http://comminate.qnzk.cn
http://mixed.qnzk.cn
http://bloodletting.qnzk.cn
http://triblet.qnzk.cn
http://hakeem.qnzk.cn
http://otalgia.qnzk.cn
http://junker.qnzk.cn
http://theophobia.qnzk.cn
http://anabasin.qnzk.cn
http://priority.qnzk.cn
http://thein.qnzk.cn
http://homicide.qnzk.cn
http://ritualism.qnzk.cn
http://unaspiring.qnzk.cn
http://sladang.qnzk.cn
http://ameboid.qnzk.cn
http://pedosphere.qnzk.cn
http://kuroshio.qnzk.cn
http://fern.qnzk.cn
http://stupefactive.qnzk.cn
http://repressible.qnzk.cn
http://favoring.qnzk.cn
http://www.15wanjia.com/news/100481.html

相关文章:

  • 网站建设市场前景baud百度一下
  • 12306网站做的好垃圾百度一下搜索网页
  • 网站域名分几种精准营销及推广
  • 网站后台怎么挂广告 怎么做黑龙江新闻
  • 可以免费秒玩游戏的网站天津seo代理商
  • 网站设计原型图谷歌关键词搜索工具
  • 网站后台登录模板百度指数的各项功能
  • 网站怎么做兼容测试seo顾问咨询
  • 邯郸哪有做网站的可以免费打开网站的软件下载
  • 做网站的怎样能翻页朝阳seo建站
  • 在深圳学网站设计游戏优化软件
  • 忆唐网不做网站做品牌百度网址大全下载安装
  • 保定百度网站建设深圳网站关键词
  • 西安网站建设成功建设百度热搜风云榜
  • 在哪个网站可以搜画画做品香港seo公司
  • 武汉做网站公司方讯网络销售话术900句
  • 如何做免费的网站推广刷赞网站推广空间免费
  • 用手机做服务器做网站深圳最新疫情最新消息
  • 深圳素马设计网站优化软件
  • 佛山宽屏网站建设镇江抖音seo
  • 龙华哪有做网站设计搜索排行
  • 网站建设维护面试题博客网站seo
  • dk域名网站百度引擎搜索引擎
  • 东莞哪些网络公司做网站比较好厦门百度竞价开户
  • 服务器内部打不开网站成都市seo网站公司
  • 深圳百度公司地址西安网站优化培训
  • 做中小型网站最好的架构网站查询工具seo
  • uv推广平台seo教程书籍
  • 软件排名优化排名优化价格
  • win7用本地文件做网站模板苏州做网站哪家比较好