qt creator在原窗口基础上新建窗口,inpaint例子的修改
2014-07-01 13:59
78 查看
1. 在原窗口基础上新建窗口
在项目名称上右击“add new” -> "qt designer form class" -> 任选一种窗口,确定
在mainwindow.h内添加上面新建窗口的对象作为新的private,添加新的SLOT为按某个按钮新建窗口
在新添加的SLOT内 初始化新窗口,并显示,即可
新窗口上想要显示的组件,按照以前在mainwindow上创建的方式创建即可
2. 在新建窗口中调用原窗口的变量
为新建窗口创建一个public函数,在原窗口中初始化新窗口对象之后,用该对象调用public函数,以原窗口变量为参数,public函数利用参数定义自身组件性质,即可将那些变量传递到新窗口
3. 一个SLOT正在执行时其他无法输入SIGNAL调用其他SLOT,如在我之前的inpainting例子里,按inpaint键时如果还没有输入image和mask时,可通过添加代码弹出messagebox提示异常,但因为inpaint那个slot仍在执行中无法按img或msk钮添加图像,所以只能手动中断程序,重新开始,所以,修改原程序,添加if else语句,如果没有Image图像时inpaint SLOT不再进行其他操作,这样其他按钮就可以click了。
在项目名称上右击“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{
。。。。
相关文章推荐
- 在昨天作业的基础上添加 :删除按钮,修改并保存按钮 和 添加按钮。完成这些按钮所对应的功能/新建页面DataXML,使用GridView显示book.xm中的图书信息
- mysql新建表和修改字段例子
- mysql新建表和修改字段例子
- MFC入门(五)-- 新建子窗口,添加子窗口初始化虚函数,修改版本和图标
- GoogleMapsV3-----基础地图(新建带标记带窗口可移动的圆,矩形,多边形)
- 给棒子补课-基础概念-数据窗口对象的修改属性
- 新建有返回值的线程的窗口(修改的窗口有问题不懂解决)
- 修改网络游戏秘籍—设计游戏外挂编写基础
- vc++修改应用程序框架主窗口的属性
- 修改弹出窗口的标题
- 锁定记录,只允许单用户修改的例子
- SQL基础:删除和修改表
- 子父窗口之间的操作之小例子
- 子父窗口之间的操作之小例子
- 利用Brush修改图片,并写入Response一例(网上BBS中贴可变文字图片的例子)。
- datagrid编辑、修改、删除、翻页例子
- 锁定记录,只允许单用户修改的例子
- JavaScript修改注册表的例子
- 我在cnblog .text基础上做的适应性修改
- 也谈基础 - 某人修改版