gpt4 book ai didi

qt - (Qt)一键单击后无法使用的窗口

转载 作者:行者123 更新时间:2023-12-02 17:15:01 24 4
gpt4 key购买 nike

我有一个带有许多按钮的窗口。每个程序都会触发一个子程序(使用Opencv API编写)。每个子程序在窗口上显示图像和内容。

问题是,当我关闭这些窗口(通过小红叉)时,所有按钮都无法单击。因此,如果要启动另一个程序,则必须退出主窗口,然后再次运行它。

换句话说,我希望能够运行所有子程序而不必每次都重新启动。

这是GUI的代码:

.cpp

#include "fenprincipale.h"
#include "ui_fenprincipale.h"
#include<highgui.h>
#include<cv.h>
#include <moyenetmedian.h>
#include<morpho.h>
#include<tracking.h>
#include<contour.h>
#include<QApplication>

FenPrincipale::FenPrincipale(QWidget *parent) :
QWidget(parent),
ui(new Ui::FenPrincipale)

{
ui->setupUi(this);
MoyenEtMedian *moyenEtMedian = new MoyenEtMedian;
morpho * mor = new morpho;
tracking * tra= new tracking;
contour * cont= new contour;

QObject::connect(ui->bMoyMed, SIGNAL( clicked() ), moyenEtMedian, SLOT( exec() ), Qt::AutoConnection );
QObject::connect(ui->bMorph, SIGNAL( clicked() ), mor, SLOT( exec() ), Qt::AutoConnection );
QObject::connect(ui->bTrack, SIGNAL( clicked() ), tra, SLOT( exec() ), Qt::AutoConnection );
QObject::connect(ui->bCont, SIGNAL( clicked() ), cont, SLOT( exec() ), Qt::AutoConnection );

}



FenPrincipale::~FenPrincipale()
{
delete ui;
}

。H :
 #ifndef FENPRINCIPALE_H
#define FENPRINCIPALE_H

#include <QWidget>
#include <QApplication>

namespace Ui {
class FenPrincipale;
}

class FenPrincipale : public QWidget
{
Q_OBJECT

public:
explicit FenPrincipale(QWidget *parent = 0);
void switch_callback(int);
void execMoyMed (void);


~FenPrincipale();

private:
Ui::FenPrincipale *ui;
};

#endif // FENPRINCIPALE_H

主要类(class):
  #include <QCoreApplication>
#include <QApplication>
#include <QtGui>
#include <QWidget>
#include "fenprincipale.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FenPrincipale fenetre;
fenetre.show();
return a.exec();

}

moyenetmedian ”的广告位实现:
 void MoyenEtMedian::exec(void)
{
const char* name = "Filtres";
IplImage* img = cvLoadImage( "C:/Users/XELTINFO/ProjetVision/image.png" );
IplImage* out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
cvNamedWindow( name, 1 );
cvShowImage(name, out);

// Create trackbar
cvCreateTrackbar2( "Filtre", name, &g_switch_value, 1, &MoyenEtMedian::switch_callback, this );

while( 1 ) {
switch( filterInt ){
case 0:
cvSmooth( img, out, CV_BLUR, 7, 7 );
break;
case 1:
cvSmooth( img, out, CV_MEDIAN, 7, 7 );
break;
}
if(filterInt != lastfilterInt){
cvShowImage(name, out);
lastfilterInt = filterInt;
}
if( cvWaitKey( 15 ) == 27 )
break;
}

cvReleaseImage( &img );
cvReleaseImage( &out );
cvDestroyWindow( name );

}

类声明:
  #ifndef MOYENETMEDIAN_H
#define MOYENETMEDIAN_H
#include "ui_fenprincipale.h"
#include<QObject>

class MoyenEtMedian : public QObject
{
Q_OBJECT
public:
MoyenEtMedian();
static void switch_callback(int position, void*);

public slots :
void exec(void);

};

#endif // MOYENETMEDIAN_H

类的代币分配和槽实现对于所有类都是非常相似的。如果还不够的话,我将添加其余的内容。

最佳答案

您正在exec()插槽中阻止事件循环,因为它不会立即返回。您应该替代QWidget的子类,并重写keyPressEvent()以从Qt的事件循环中获取键盘输入,而不是执行当前的繁忙循环。

关于qt - (Qt)一键单击后无法使用的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com