zoukankan      html  css  js  c++  java
  • Qt Widget的一次经历

    class RobotRemote : public QWidget
    {
    public:
        RobotRemote(QWidget * parent = nullptr);
        ~RobotRemote();
        bool Start();
    signals:
        void signalUpdateUi();
    public slots:
    
        void onUpdateUi();
    private:
        Json::Value mJsonString;
    
    }
    RobotRemote::RobotRemote(QWidget * parent ) :QWidget(parent) 
    { 
    QObject::connect(
    this,SIGNAL(signalUpdateUi()),this,SLOT(onUpdateUi())); mJsonString = Json::Value::null;
       Start(); }
    bool RobotRemote::Start() { // 加载地图 QString fileName = QFileDialog::getOpenFileName(this, tr("open file"), "", tr("JsonFile(*.json);")); if (!fileName.isEmpty()) { mJsonString = UmJson::ReadFileToJson(fileName.toStdString()); if(!mJsonString.empty()) HandleGetMap(mJsonString); LOG(INFO)<<"OpenMap: "<<QThread::currentThread(); } } void RobotRemote::onUpdateUi() { if(!mJsonString.empty()) HandleGetMap(mJsonString); LOG(INFO)<<"AddLabel: "<<QThread::currentThread(); }
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->centralWidget->setLayout(ui->gridLayout);
    
        mPRR = GetRobotRemoteInterface();
    
        if(mPRR==nullptr)
        {
            LOG(WARNING)<<"RobotRemote allocate object failed!
    ";
            return;
        }
    
        ui->stackedWidget->setCurrentWidget(ui->mainpage);
        mPRR->setParent(ui->mainpage);
        mPRR->move(0,0); //to its parent
        mPRR->resize(840,678);//to its parent
    }



    ui->stackedWidget->setCurrentWidget(ui->mainpage); mPRR->setParent(ui->mainpage);

    Start()可以认为在构造函数中一开始就调用了,此时打开一个文件,mJsonString中有Json文件中读出来的内容。 用信号触发槽函数onUpdateUi()执行后,mJsonString内容是没有变的,我认为这是符合我的期望的。

    但是如果我改成:去掉

        mPRR->setParent(ui->mainpage);
        mPRR->move(0,0); //to its parent
        mPRR->resize(840,678);//to its parent

    保留

     ui->stackedWidget->setCurrentWidget(ui->mainpage);


    mJsonString竟然为空,中间没有任何mJsonString清空或修改的操作,线程id也没有变。


    对Qt看来还不了解。继续追。。。

    槽函数的控件"mainpage",


    Start()的控件对象


    根本就是两个控件,所以值确实是不一样的。
    问题出在了这里:异常的例子里面
    ui->stackedWidget->setCurrentWidget(ui->mainpage); 
    这个操作把当前的currentWidget置为了RobotRemote类型的控件(QWidget),这个控件与
    mPRR = GetRobotRemoteInterface();
    这个RobotRemote控件一点关系都没有,尽管他们都是RobotRemote类型的,但是ui->mainpage 并不是 mPRR指向的那个全局的RobotRemote对象。
    但加了
    mPRR->setParent(ui->mainpage);
    就不一样了。




  • 相关阅读:
    POJ 3211 Washing Clothes
    MySQL 优化Limit分页
    signed 与 unsigned 有符号和无符号数
    C/C++ 变量的初始化
    C/C++ 变量的初始化
    返回值的判断
    返回值的判断
    《涅槃经》的研读
    《涅槃经》的研读
    Opencv Surf算子特征提取与最优匹配
  • 原文地址:https://www.cnblogs.com/hitzzq/p/13927034.html
Copyright © 2011-2022 走看看