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

闲人1991 2013-12-21 04:19:15

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的值,为什么会这样,这个窗体指针不能使用它里面所包含的的所有子部件吗?请问我现在想实现怎样才是正确的写法。
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
水军总督 2013-12-24
  • 打赏
  • 举报
回复
引用 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[/quote] 我在最上面都给出了类,都是设为public;写成这种方式吗a->b->()...从语法角度上有问题?[/quote]我不知道你说的a和b分别是什么。 想玩Qt,C++基础打扎实了就会很容易上手的。
闲人1991 2013-12-24
  • 打赏
  • 举报
回复
引用 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申请空间了。
yangduboy 2013-12-24
  • 打赏
  • 举报
回复
怎么死的?有信息吗? a=QString(":/clock/%1").arg(min); positiveWidget->min_1->setPixmap(a); 这里a 是QString的,应该是图片格式吧 例如":/clock/60.png" 这里setPixmap 的类型是QPixmap吧 positiveWidget->min_1->setPixmap(QPixmap(a));
闲人1991 2013-12-23
  • 打赏
  • 举报
回复
引用 5 楼 kaida1234 的回复:
[quote=引用 4 楼 u011216653 的回复:] 指针有实例化的,在QClock里面用new申请内存了,那为什么我在这句
QClock *positiveWidget=new QClock();
后使用 positiveWidget->min_1->setPixmap(a);就死掉了 调试查看的值显示min_1为<unavailable synchronous data>什么问题?
看看是不是权限问题,public还是private[/quote] 我在最上面都给出了类,都是设为public;写成这种方式吗a->b->()...从语法角度上有问题?
水军总督 2013-12-23
  • 打赏
  • 举报
回复
引用 4 楼 u011216653 的回复:
指针有实例化的,在QClock里面用new申请内存了,那为什么我在这句
QClock *positiveWidget=new QClock();
后使用 positiveWidget->min_1->setPixmap(a);就死掉了 调试查看的值显示min_1为<unavailable synchronous data>什么问题?
看看是不是权限问题,public还是private
闲人1991 2013-12-23
  • 打赏
  • 举报
回复
引用 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>什么问题?
闲人1991 2013-12-23
  • 打赏
  • 举报
回复
引用 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倍的这种标签,思想没错吧,这指针怎么就错了...
水军总督 2013-12-23
  • 打赏
  • 举报
回复
QLabel *min_1;
    QLabel *min_2;
    QLabel *g;
    QLabel *se_1;
    QLabel *se_2;
楼主的这些指针没有实例化,先new后看看怎么样 如:
QLabel *min_1 = new QLabel;
如果不想实例化的话,就不要用指针,如:
QLabel min_1;
  • 打赏
  • 举报
回复
定时器什么时候触发,你的min_1确定初始化了吗?

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧