您的位置:首页 > 编程语言 > Qt开发

qt creator在原窗口基础上新建窗口,inpaint例子的修改

2014-07-01 13:59 78 查看
1. 在原窗口基础上新建窗口

在项目名称上右击“add new” -> "qt designer form class" -> 任选一种窗口,确定

在mainwindow.h内添加上面新建窗口的对象作为新的private,添加新的SLOT为按某个按钮新建窗口

在新添加的SLOT内 初始化新窗口,并显示,即可

private slots:




void on_commandLinkButton_2_clicked();


private:

Form* secForm;


void MainWindow::on_commandLinkButton_2_clicked()

{

secForm=new Form();


secForm->show();

}



新窗口上想要显示的组件,按照以前在mainwindow上创建的方式创建即可

2. 在新建窗口中调用原窗口的变量

为新建窗口创建一个public函数,在原窗口中初始化新窗口对象之后,用该对象调用public函数,以原窗口变量为参数,public函数利用参数定义自身组件性质,即可将那些变量传递到新窗口

public:

explicit Form(QWidget *parent = 0);

~Form();

void setFile(QString img_name, QString msk_name, QString edge_name);



void Form::setFile(QString img_name, QString msk_name, QString edge_name){

pixMap_img=new QPixmap(img_name);

pixMap_msk=new QPixmap(msk_name);

pixMap_edge=new QPixmap(edge_name);


graphicsScene_img->addPixmap(*pixMap_img);

graphicsScene_msk->addPixmap(*pixMap_msk);

graphicsScene_edge->addPixmap(*pixMap_edge);


ui->graphicsView_img->show();

ui->graphicsView_msk->show();

ui->graphicsView_edge->show();


}



void MainWindow::on_commandLinkButton_2_clicked()

{

secForm=new Form();

secForm->setFile(filename,filename_mask,QString::fromStdString(img_edge));



secForm->show();

}


3. 一个SLOT正在执行时其他无法输入SIGNAL调用其他SLOT,如在我之前的inpainting例子里,按inpaint键时如果还没有输入image和mask时,可通过添加代码弹出messagebox提示异常,但因为inpaint那个slot仍在执行中无法按img或msk钮添加图像,所以只能手动中断程序,重新开始,所以,修改原程序,添加if else语句,如果没有Image图像时inpaint SLOT不再进行其他操作,这样其他按钮就可以click了。

void MainWindow::on_commandLinkButton_clicked()

{

/* proposed method	*/

std::string image_name=filename.toStdString();

std::string mask_name=filename_mask.toStdString();

img0 = imread(image_name, -1);

if (img0.empty())

{

QMessageBox::information(this,"error!!","no input image");

}

else{

img = img0.clone();

//   inpaintMask = Mat::zeros(img.size(), CV_8U);

inpaintMask0=imread(mask_name,-1);

if(inpaintMask0.empty()){

QMessageBox::information(this,"error!!","no inpaint mask");

    }

    else{

inpaintMask=inpaintMask0.clone();


if(inpaintMask.size()!=img.size()){

QMessageBox::information(this,"error!!","image and mask don't match', try again");

}

else{

。。。。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: