【问题标题】:Qt, new object for MainWindow, app crash,how to emit finished() signalQt,MainWindow 的新对象,应用程序崩溃,如何发出 finished() 信号
【发布时间】:2012-01-07 09:24:03
【问题描述】:

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

如何从Download Class 中的MainWindow 类运行方法,或者从Download Class 中引用这些按钮。

edit://我需要发出信号

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; 
        }

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

【问题讨论】:

  • 您发布的代码不一致(信号声明和发出的信号名称不同)。由于信号和插槽名称非常重要,请清理您的问题并确保它与您的真实代码匹配。

标签: qt button mainwindow


【解决方案1】:

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

【讨论】:

  • 那么,如何从 MainWindow 以外的其他类更改 gui?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2013-09-20
  • 2015-12-31
相关资源
最近更新 更多