Qt,在构造函数之外编辑小部件

时间:2015-02-17 23:19:57

标签: c++ qt

我有:

Game::Game ( QWidget * parent ) :
        QWidget ( parent ), ui ( new Ui::Game )
{  
    ui->setupUi ( this ) ;
    ui->progressBar_Loading->setValue ( 0 ) ;
}

我无法在静态函数中调用ui->progressBar_Loading->setValue ( 25 ) ;,所以我尝试了:

QProgressBar * progressBar_Loading;

Game::Game ( QWidget * parent ) :
        QWidget ( parent ), ui ( new Ui::Game )
{
    progressBar_Loading = ui->progressBar_Loading;
}

但这会导致应用在启动时崩溃。任何已知的解决方案?

2 个答案:

答案 0 :(得分:0)

如果ui未被声明为构造函数的局部变量,你可以在构造函数外的类中的任何地方调用ui->progressBar_Loading->setValue ( 25 ) ;,我将提供一个对我有用的示例, widget.h类定义

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
    QTimer *timer;

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

public slots:
    void updateProgressBar();
private:
    Ui::Widget *ui;
};

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->progressBar->setValue(0);
    timer = new QTimer;
    timer->start(500);
    connect(timer,SIGNAL(timeout()),this,SLOT(updateProgressBar()));
    show();
}

void Widget::updateProgressBar()
{
    int k = ui->progressBar->value();
    qDebug() << "Updating" << k ;
    ui->progressBar->setValue(++k);
    timer->start(500);
}

Widget::~Widget()
{
    delete ui;
}

只需为widget创建一个Object,它就可以运行,

答案 1 :(得分:0)

  

静态成员函数实际上是全局函数,就在内部   class的命名空间。也就是说,它们没有'this'指针   因此无法访问该类的任何其他成员(除了   其他静态成员)。