您的位置:首页 > 房产 > 建筑 > qq推广链接_国家电网公司人力资源招聘平台_免费b2b推广网站大全_如何免费创建自己的网站平台

qq推广链接_国家电网公司人力资源招聘平台_免费b2b推广网站大全_如何免费创建自己的网站平台

2025/1/12 23:24:03 来源:https://blog.csdn.net/kongqizyd146/article/details/145078830  浏览:    关键词:qq推广链接_国家电网公司人力资源招聘平台_免费b2b推广网站大全_如何免费创建自己的网站平台
qq推广链接_国家电网公司人力资源招聘平台_免费b2b推广网站大全_如何免费创建自己的网站平台

文章目录

  • 1、QLCDNumber
  • 2、ProgressBar
  • 3、QCalendarWidget


1、QLCDNumber

在这里插入图片描述
在这里插入图片描述

写一个倒计时程序。拖一个LCD Number到界面:

在这里插入图片描述

定时器用Qt的QTimer类,这个类的对象会产生一个timeout信号,通过start方法来开启定时器,并且参数中设定触发timeout信号的周期,单位是ms,之后通过connect给timeout信号绑定上一个槽函数就可以了。

// widget.h
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();private:Ui::Widget *ui;QTimer* timer;
};// widget.cpp
#include <QDebug>
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display(10);timer = new QTimer(this);// 先连接再启动timerconnect(timer, &QTimer::timeout, this, &Widget::handle);timer->start(1000);
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{int value = ui->lcdNumber->intValue();if (value <= 0){timer->stop();return ;}ui->lcdNumber->display(value - 1);
}

如果不用QTimer类

#include <QTimer>
#include <thread>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display(10);std::thread t([this] () {int value = this->ui->lcdNumber->intValue();while (true){// 作用于当前线程std::this_thread::sleep_for(std::chrono::seconds(1));if (value <= 0)break;this->ui->lcdNumber->display(--value);}});
}

用线程去写,是因为如果直接在构造函数里写,那就得等到构造完才能呈现界面,那么数字倒数的界面就无法呈现。但是像上面的代码会出错:terminate called without an active exception,因为Qt中有主线程来维护界面,为了线程安全,Qt不允许其它线程修改界面。之前的槽函数就是由主线程调用的,所以没问题。所以这个思路行不通。

在main.cpp文件中

return a.exec();

这句代码会让主线程进入事件循环,exec一直在循环,每执行一次循环,都会有一些固定的事件来操作。

2、ProgressBar

进度条。

在这里插入图片描述
在这里插入图片描述

关于对齐

Qt::AlignLeft:左对齐
Qt::AlignRight:右对齐
Qt::AlignCenter:居中对齐
Qt::AlignJustify:两端对齐

放一个ProgressBar到界面上

在这里插入图片描述

调整属性,让其初始为0

在这里插入图片描述

// widget.h
#include <QTimer>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();private:Ui::Widget *ui;QTimer* timer;
};// widget.cpp
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &Widget::handle);timer->start(100);
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{int value = ui->progressBar->value();if (value >= 100){timer->stop();return;}ui->progressBar->setValue(value + 1);
}

改个颜色,右键控件,改变样式表

QProgressBar::chunk { background: red;}

chunk就表示进度条中有颜色的那部分。然后改ProgressBar的alignment属性来设定数字对齐方式。

3、QCalendarWidget

日历

在这里插入图片描述

信号

selectionChanged(const QDate&) 当选中的日期发生改变时发出。

在这里插入图片描述

放一个Label和Calendar Widget

在这里插入图片描述

转到日历的selectionChanged槽函数

void Widget::on_calendarWidget_selectionChanged()
{QDate date = ui->calendarWidget->selectedDate();ui->label->setText(date.toString());
}

结束。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com