gpt4 book ai didi

c++ - 从不同的类访问/修改 QDialog 的成员?

转载 作者:行者123 更新时间:2023-11-28 05:49:42 25 4
gpt4 key购买 nike

我有一个类需要访问 QDialog 成员,但我无法做到这一点,以便类可以看到它需要什么。仅提供一些背景知识:最终目标是使 QTextEdit 小部件在显示 5 秒后淡出并隐藏。这是我的代码(只有相关的部分;我问的更多是关于范围的问题):

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "mytimer.h"

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

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

private:
Ui::Dialog* ui;
myTimer mTimer;

};

#endif // DIALOG_H

对话框.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include "q_debugstream.h"
#include <iostream>
#include <QTextEdit>

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
// this works in this .cpp file but not in mytimer.cpp when trying something similar
ui->someQTextEdit->setTextInteractionFlags(ui->someQTextEdit->textInteractionFlags() | Qt::TextEditable);

myTimer mTimer;

}

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

mytimer.h

#ifndef MYTIMER_H
#define MYTIMER_H
#include <QtCore>

class myTimer : public QObject
{
Q_OBJECT

public:
myTimer();
QTimer* timer;

public slots:
void mySlot();
};

#endif // MYTIMER_H

mytimer.cpp

#include "mytimer.h"
#include <QDebug>
#include <iostream>
#include <QTextEdit>
#include <QGraphicsOpacityEffect>
#include <QGraphicsItem>
#include <QPropertyAnimation>
#include <QTime>
#include "ui_dialog.h"
#include "dialog.h"

myTimer::myTimer()
{
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(mySlot()));

timer->start(5000);
}

void myTimer::mySlot(){

QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this);
ui->someQTextEdit->setGraphicsEffect(eff);
QPropertyAnimation* a = new QPropertyAnimation(eff,"opacity");
a->setDuration(350);
a->setStartValue(1);
a->setEndValue(0);
a->setEasingCurve(QEasingCurve::OutBack);
a->start(QPropertyAnimation::DeleteWhenStopped);
}

问题出在 ui->someQTextEdit->setGraphicsEffect(eff); 行。我收到的错误告诉我 ui 未在此范围内声明。 someQTextEdit 指的是我在设计器中创建对话框时制作的QTextEdit 小部件。我必须在 mytimer.cpp 中做什么才能访问 someQTextEdit(在对话框的 ui_dialog.h 文件中定义)由于使用设计器而生成)。

提前致谢。

最佳答案

您的计时器用作位于堆栈而不是堆上的局部变量。因此,当 Dialog::Dialog 构造函数结束其执行时,该对象将立即被销毁(C++ 基础知识)。

无论如何,您不需要自定义计时器。使用 QProperty 动画。

关于c++ - 从不同的类访问/修改 QDialog 的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35520963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com