Qt,MainWindow的新对象,应用程序崩溃,如何发出finished()信号

发布于 2024-12-25 19:29:34 字数 1245 浏览 2 评论 0原文

在主类 MainWindow 中,我有一个方法,在下载应用程序时为每个按钮设置 setEnabled("false") 。在其他“下载”类中,我有负责下载的方法。有这样的东西 if ( uRet == S_OK ) 下载后我想为每个按钮 setEnable("true") ,但我无法在这个 if() 中从 MainWindow 运行方法因为我得到“QWidget:必须在 QPaintDevice 之前构建 QApplication”。

如何从下载类中的 MainWindow 类运行该方法,或从下载类中引用这些按钮。

编辑://我需要发出信号

class downloaded : public QObject
{
    Q_OBJECT
public:
    void test3();
signals:
    void changeEnabled();
};

void downloaded::test3(){
    emit changeEnabled();

}
class MainWindow : public QMainWindow{
        Q_OBJECT

public:
       ...
public slots:
        void ONchangeEnabled();
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    downloaded test_object;

   connect(&test_object, SIGNAL(changeEnabled() ), this, SLOT(ONchangeEnabled() ) );

   ui->setupUi(this);           
   setupUI();                  

}

void MainWindow::ONchangeEnabled(){
    ui->actionDL->setEnabled(true);
}

并在下载文件的功能中我有类似的东西。

downloaded obiekt;
...
     if ( uRet == S_OK )
        {
             obiekt.test3(); return 0;
        }
        else {
             obiekt.test3(); return 1; 
        }

但什么也没发生,我做错了什么。

In main class MainWindow I have method which sets setEnabled("false") for each button, when the application is downloading. In other class "Download" I have method responsible for downloading. There is sth like this if ( uRet == S_OK ) and after download I would like to setEnable("true") for each button, but I can't run method from MainWindow in this if() 'couse I get "QWidget: Must construct a QApplication before a QPaintDevice".

How to run the method from the MainWindow class in the Download Class, or refer to these buttons from the Download Class.

edit:// I need to emit signal

class downloaded : public QObject
{
    Q_OBJECT
public:
    void test3();
signals:
    void changeEnabled();
};

void downloaded::test3(){
    emit changeEnabled();

}
class MainWindow : public QMainWindow{
        Q_OBJECT

public:
       ...
public slots:
        void ONchangeEnabled();
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    downloaded test_object;

   connect(&test_object, SIGNAL(changeEnabled() ), this, SLOT(ONchangeEnabled() ) );

   ui->setupUi(this);           
   setupUI();                  

}

void MainWindow::ONchangeEnabled(){
    ui->actionDL->setEnabled(true);
}

and in function which downloads files I have sth like that.

downloaded obiekt;
...
     if ( uRet == S_OK )
        {
             obiekt.test3(); return 0;
        }
        else {
             obiekt.test3(); return 1; 
        }

But nothing happens, what am I doing wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆伤 2025-01-01 19:29:34

信号始终是对象级别的,而不是类级别的。您没有连接到您正在尝试侦听信号的“下载”对象的实例。您连接的连接是在 MainWindow 构造函数中创建和删除的,与第二个代码块中创建的连接无关。

Signals are always object and not class level. You are not connecting to the instance of "downloaded" object you are trying to listen signals to. The one you connect to is created and deleted in the MainWindow constructor, and has no relevance to the one created in the second code block.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文