【问题标题】:Qt - mainwindow class object in another class doesn't work wellQt - 另一个类中的主窗口类对象不能正常工作
【发布时间】:2017-05-13 18:17:25
【问题描述】:
void MyAnotherClass::mySlot(){
MainWindow window;
window.myFunction();}

void MainWindow::myFunction(){

qDebug() << "THIS qDebug works well but ui do NOT";

ui->textEdit->setText("Why i do not working?");
}

为什么 qDebug 在这种情况下可以正常工作,但 ui->... 却不行?如何解决?

编辑: 解决方案: `QPlainTextEdit *指针; MainWindow 构造函数{ 指针=ui->qPlainTextEdit;}

Some Another's 类方法{ 指针->appendPlainText("它有效"); }`

【问题讨论】:

    标签: qt class object slot mainwindow


    【解决方案1】:

    您在MyAnotherClass::mySlot() 中创建MainWindow 类的新实例。当此插槽结束时,此实例将被删除。所以你看不到任何变化。

    void MyAnotherClass::mySlot() {
        MainWindow window;  //new instance created
        window.myFunction();
    } //here this instance deleted
    

    您应该在MyAnotherClass 内的某处有指向主窗口的指针:

    MyAnotherClass
    {
         .......   
        private slots:
            void mySlot();
    
        private:
            MainWindow* _mainWindow;
          ...............
    };
    

    然后你可以这样做:

    void MyAnotherClass::mySlot() {
        _mainWindow->myFunction();
    }
    

    当然,你应该先以某种方式初始化这个指针,然后才能使用它。

    【讨论】:

    • 如何初始化这个指针?你知道这样做的好方法吗? class MyAnotherClass : public QPlainTextEdit{ private: MainWindow* _mainWindow; }
    • 可能有几种方法取决于您的代码设计。您可以将其传递给构造函数或某些方法。或者你可以让MainWindow 成为单身人士。
    • mainwindow.cpp mainwindow.h myqplaintextedit.h 我的另一个类是 MyQPlaintTextEdit 和代码你可以在 exit_slot 的 mainwindow.cpp 中找到()on_pushButton_clicked();你能告诉我如何在我的情况下使用该指针吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2014-01-17
    • 1970-01-01
    • 2020-11-19
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多