Qt Widget的一次經歷
阿新 • • 發佈:2020-11-04
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!\n"; 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看來還不瞭解。繼續追。。。