1. 程式人生 > 實用技巧 >Qt Widget的一次經歷

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!\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看來還不瞭解。繼續追。。。