子視窗與父視窗互動
阿新 • • 發佈:2019-02-03
專案中一直想實現的功能子視窗dialog為檔案選擇視窗,選擇檔案點選確認關閉後,父視窗中開啟指定檔案。
是自己建的檔案視窗,沒有用到
Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ", tr("Allfile(*.*);;mp3file(*.mp3)"));
所以只好自己摸索一下;
基本思路:
①在子視窗中宣告訊號 ②在主視窗中宣告並實現槽函式 ③在主視窗中connect繫結訊號和槽 ④子視窗中傳送訊號(emit)程式碼:
子視窗宣告:
signals:
voidloadfilesignal(int主視窗宣告:);
publicslots:
voidopenfile()
主視窗槽函式:
voidMainWindow::openfile()
{
QImagetest;
test.load(Loadfile::open_filename);
f->resize(test.width(),test.height());
f->setPixmap(QPixmap::fromImage(test));
QFileInfofi(Loadfile::open_filename);
d->setText(fi.fileName());
qDebug()<<"openfile!";
qDebug()<<Loadfile::open_filename;
}用於開啟指定圖片
主視窗繫結:
voidMainWindow::loadfile()
{
loadfile1=newLoadfile(this);
//不能在mainwindow的建構函式中繫結
connect(loadfile1,SIGNAL(loadfilesignal(int)),this,SLOT(openfile()));
loadfile1->show();
}注意:
這個分析得很好
子視窗發射訊號:
按下按鈕後觸發函式,發射訊號並關閉dialog
voidLoadfile::loadfiler()
{ QString*fn=newQString;
//獲取選擇物件
QModelIndexnindex=ui->treeView->currentIndex();//currentindex這個函式不知哪裡來的
if(pathvalue){
*fn=local_model->filePath(nindex);
}
else
*fn=move_model->filePath(nindex);
//加工變數
open_filename.clear();
open_filename.append(*fn);
//qDebug()<<"loadfiler"+open_filename;//上面是為了獲得所選檔案
emitLoadfile::loadfilesignal(1);//這裡!!!!!!!!!!!!
this->close();
}