当前位置:编程学习 > wap >>

一个子窗口的指针在调用它的QLabel指针就死掉了


class QClock:public QWidget
{
    Q_OBJECT
public:
    QClock(QWidget *parent=0);
    ~QClock();
    QLabel *min_1;
    QLabel *min_2;
    QLabel *g;
    QLabel *se_1;
    QLabel *se_2;
    void get_time(int times,QClock *pa);
private:
    void paintEvent(QPaintEvent *event);
};

这是主窗体中放置的一个子窗体。
在主窗体的构造函数中我申请了这个窗体的指针变量,布局好了。

  QClock *positiveWidget=new QClock();

void Mainwindow::timeupdates()
{
    QString a;
    int min,se;
    if(second<180)
        second++;
    min=(180-second)/60;
    se=(180-second)%60;
    a=QString(":/clock/%1").arg(min);
    m_critical=m_rotate=second;
    update();
    if(second==0)
       timer->stop();
    positiveWidget->min_1->setPixmap(a);
}

上面是一个定时器触发后的槽函数,在最后一句我想给窗体中的min_1这个Label替换图片,就是死在这一句了,我调试了下,看不到min_1的值,为什么会这样,这个窗体指针不能使用它里面所包含的的所有子部件吗?请问我现在想实现怎样才是正确的写法。 --------------------编程问答-------------------- 定时器什么时候触发,你的min_1确定初始化了吗? --------------------编程问答--------------------
QLabel *min_1;
    QLabel *min_2;
    QLabel *g;
    QLabel *se_1;
    QLabel *se_2;

楼主的这些指针没有实例化,先new后看看怎么样
如:
QLabel *min_1 = new QLabel;


如果不想实例化的话,就不要用指针,如:
QLabel min_1;
--------------------编程问答--------------------
引用 1 楼 heksn 的回复:
定时器什么时候触发,你的min_1确定初始化了吗?

有的,只是不在主窗体的构造函数里面;
  QClock *positiveWidget=new QClock();//申请完整个窗体指针
在QClock的构造函数如下
QClock::QClock(QWidget *parent)
    :QWidget(parent)
{
    setWindowFlags(Qt::FramelessWindowHint);
    min_1=new QLabel();
    min_2=new QLabel();
    g=new QLabel();
    se_1=new QLabel();
    se_2=new QLabel();

因为对标签要初始化贴上图片,所以在QClock构造函数里面就new了。那不是申请窗体指针这些QLabel不就分配内存了,而且定时器触发的槽函数是在按下按钮才开始及时的,这是主窗体都初始化完了,这样的写法是不正确的?我试过如果把这些变量定义在主窗体类里面是可以的,但是我用这个QClock类包装起来,因为在窗体里面要用到这样的2个窗体,这样就不用申请2倍的这种标签,思想没错吧,这指针怎么就错了... --------------------编程问答--------------------
引用 2 楼 kaida1234 的回复:
QLabel *min_1;
    QLabel *min_2;
    QLabel *g;
    QLabel *se_1;
    QLabel *se_2;

楼主的这些指针没有实例化,先new后看看怎么样
如:
QLabel *min_1 = new QLabel;


如果不想实例化的话,就不要用指针,如:
QLabel min_1;

指针有实例化的,在QClock里面用new申请内存了,那为什么我在这句
QClock *positiveWidget=new QClock();

后使用 positiveWidget->min_1->setPixmap(a);就死掉了
调试查看的值显示min_1为<unavailable synchronous data>什么问题? --------------------编程问答--------------------
引用 4 楼 u011216653 的回复:
指针有实例化的,在QClock里面用new申请内存了,那为什么我在这句
QClock *positiveWidget=new QClock();

后使用 positiveWidget->min_1->setPixmap(a);就死掉了
调试查看的值显示min_1为<unavailable synchronous data>什么问题?

看看是不是权限问题,public还是private --------------------编程问答--------------------
引用 5 楼 kaida1234 的回复:
Quote: 引用 4 楼 u011216653 的回复:

指针有实例化的,在QClock里面用new申请内存了,那为什么我在这句
QClock *positiveWidget=new QClock();

后使用 positiveWidget->min_1->setPixmap(a);就死掉了
调试查看的值显示min_1为<unavailable synchronous data>什么问题?

看看是不是权限问题,public还是private

我在最上面都给出了类,都是设为public;写成这种方式吗a->b->()...从语法角度上有问题? --------------------编程问答--------------------
引用 6 楼 u011216653 的回复:
Quote: 引用 5 楼 kaida1234 的回复:

Quote: 引用 4 楼 u011216653 的回复:

指针有实例化的,在QClock里面用new申请内存了,那为什么我在这句
QClock *positiveWidget=new QClock();

后使用 positiveWidget->min_1->setPixmap(a);就死掉了
调试查看的值显示min_1为<unavailable synchronous data>什么问题?

看看是不是权限问题,public还是private

我在最上面都给出了类,都是设为public;写成这种方式吗a->b->()...从语法角度上有问题?
我不知道你说的a和b分别是什么。
想玩Qt,C++基础打扎实了就会很容易上手的。 --------------------编程问答--------------------  怎么死的?有信息吗?

a=QString(":/clock/%1").arg(min);   
positiveWidget->min_1->setPixmap(a);  
这里a 是QString的,应该是图片格式吧  例如":/clock/60.png"
这里setPixmap 的类型是QPixmap吧  
positiveWidget->min_1->setPixmap(QPixmap(a));   --------------------编程问答--------------------
引用 8 楼 yangduboy 的回复:
 怎么死的?有信息吗?

a=QString(":/clock/%1").arg(min);   
positiveWidget->min_1->setPixmap(a);  
这里a 是QString的,应该是图片格式吧  例如":/clock/60.png"
这里setPixmap 的类型是QPixmap吧  
positiveWidget->min_1->setPixmap(QPixmap(a));  

图片使用没有问题,我是放在资源文件里面改成数字的别名,所以不需要后缀。是调试到这里,min_1查看不了值,但是构造函数里面已经用new申请空间了。
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,