就是一打开子窗口就开始倒计时,倒计时结束后打开另一个窗口,这个操作怎么实现
思路:在子窗体中设置倒计时,倒计时过后,在子窗体中打印新的窗体。
你在主窗口定义一个QTimer计时器,设置计时器时间间隔为一秒,使用TimeOut信号触发槽函数倒计时,在槽函数中进行自己所需要的倒计时,当时间到了,你就show()出另一个子窗体就行!
当你在主窗体show()出第一个子窗体时,就可以开启定时器了,Start函数,剩下的就是等待时间到了,槽函数处理show()出另一个子窗体!
对你你的题目,我的理解是:
第一,创建GUI程序肯定有一个主窗体。
在主窗体中添加一个定时器QTimer,设置时间间隔为1秒
定时器绑定信号与槽,TimerOut信号,槽函数自定义。
槽函数中进行倒计时处理,当倒计时结束,就可以show出第二个子窗体了。
在主窗体中你设置一个按钮,单击按钮触发槽函数。
槽函数中,你show出第一个子窗体。
然后启动定时器。
最后就会达到你需要的效果了
新建了一个程序,我们就让windows的一个按钮打开子窗体Dialog1,在其上显示倒计时,倒计时为0的时候,让Dialog2显示。
在Dialog1头文件中添加:
#include <QShowEvent>
#include <QCloseEvent>
#include <QTimerEvent>
class Dialog1 : public QDialog
{
Q_OBJECT
public:
explicit Dialog1(QWidget *parent = nullptr);
~Dialog1();
int count_number;
bool show_flag;
int time_id;
private:
Ui::Dialog1 *ui;
signals:
void OpenDialog2Sig();
public slots:
void showEvent(QShowEvent *event);
void closeEvent(QCloseEvent *event);
void timerEvent(QTimerEvent *event);
};
具体的实现:
Dialog1::Dialog1(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog1)
{
ui->setupUi(this);
time_id=startTimer(1000);//1000毫秒就是1秒
count_number=10;//倒计时10秒
}
Dialog1::~Dialog1()
{
delete ui;
}
void Dialog1::showEvent(QShowEvent *event)
{
count_number=10;
ui->label_count->setText(QString::number(count_number,10));
show_flag=true;
}
void Dialog1::closeEvent(QCloseEvent *event)
{
show_flag=false;
}
void Dialog1::timerEvent(QTimerEvent *event)
{
if(event->timerId()==time_id)
{
if(show_flag==true)
{
count_number--;
ui->label_count->setText(QString::number(count_number,10));
if(count_number<=0)
{
close();//关闭自己
emit OpenDialog2Sig();//发出开启另一个窗体的信号
}
}
}
}
然后在mainiwindows的构造函数里把信号槽函数绑定一下:
connect(&dlg1,SIGNAL(OpenDialog2Sig()),
this,SLOT(OpenDialog2Slot()));
在mainwindows里自定义的槽函数OpenDialog2Slot()调用Dialog2的显示:
void MainWindow::OpenDialog2Slot()
{
dlg2.show();
}
看看效果,在mainwindow通过按钮打开dialog1,倒计时开始了:
当倒计时到0的时候,dialog1自动关闭,同时调用dialog2显示。