Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将焦点返回到窗口?_C++_Qt_Qt Designer_Qtgui_Qmessagebox - Fatal编程技术网

C++ 如何将焦点返回到窗口?

C++ 如何将焦点返回到窗口?,c++,qt,qt-designer,qtgui,qmessagebox,C++,Qt,Qt Designer,Qtgui,Qmessagebox,关闭MessageBox后,焦点自身不会返回窗口。我试过: QMessageBox msgBox; msgBox.setText("Ok"); msgBox.exec(); this->setFocus(); 如何将焦点返回到主窗口(此) //dialog.h #ifndef对话框 #定义对话框 #包括 名称空间用户界面{ 类对话框; } 类对话框:公共QDialog { Q_对象 公众: 显式对话框(QWidget*parent=0); void loadFile(); ~Dialog

关闭MessageBox后,焦点自身不会返回窗口。我试过:

QMessageBox msgBox;
msgBox.setText("Ok");
msgBox.exec();
this->setFocus();
如何将焦点返回到主窗口(

//dialog.h
#ifndef对话框
#定义对话框
#包括
名称空间用户界面{
类对话框;
}
类对话框:公共QDialog
{
Q_对象
公众:
显式对话框(QWidget*parent=0);
void loadFile();
~Dialog();
专用插槽:
单击按钮时无效添加2();
私人:
Ui::Dialog*Ui;
};
#endif//对话框
//dialog.cpp
//
#包括“dialog.h”
#包括“ui_dialog.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
Dialog::Dialog(QWidget*父项):
QDialog(父级),
ui(新建ui::对话框)
{
这->setFocusPolicy(Qt::StrongFocus);
用户界面->设置用户界面(此);
}
void Dialog::loadFile()
{
QString urlForXML=”http://apifree.forvo.com/key//format/xml/action/word-pronunciations/word/";
urlForXML+=ui->textHttp->toPlainText()++“/language/de”;
QNetworkAccessManager m_NetworkMngr;
QNetworkReply*reply=m_NetworkMngr.get(QNetworkRequest(urlForXML));
QEventLoop循环;
连接(应答、信号(finished())、循环和插槽(quit());
loop.exec();
QXmlStreamReader;
addData(reply->readAll());
QString路径mp3url;
而(!xmlReader.atEnd())//。。。
{
xmlReader.readNextStartElement();//
如果(xmlReader.name()=“pathm3”)//
{
pathmp3Url=xmlReader.readElementText();
打破
}
}
删除答复;
if(pathmp3Url.count())
{
QNetworkAccessManager m_NetworkMngr2;
QNetworkReply*reply2=m_NetworkMngr2.get(QNetworkRequest(pathmp3Url));
QEventLoop循环2;
连接(reply2,信号(finished()),&loop2,插槽(quit());
loop2.exec();
QString QString_mp3file=“/users/derkode/documents/forvoclient-mp3/”+ui->textHttp->toPlainText()+“.mp3”;
QFile mp3_文件(qstring_mp3文件);
打开mp3_文件(QIODevice::WriteOnly);
mp3_file.write(reply2->readAll());
QMediaPlayer*player=新的QMediaPlayer;
player->setMedia(QUrl::fromLocalFile(qstring_mp3file));
播放器->设置音量(50);
player->play();
mp3_文件.close();
删除答复2;
}
其他的
{
QMessageBox*msgBox=新的QMessageBox(此);
msgBox->setText(“确定”);
msgBox->exec();
此->设置焦点();
}
}
对话::~Dialog()
{
删除用户界面;
}
无效对话框::在按钮上单击鼠标左键()
{
loadFile();
}

此->父对象()->setFocus();在msgBox->exec()之后(代码末尾附近)

另一个窗口获得焦点吗?或者焦点在哪里?另外,你能提供一个独立的例子吗?@itwasntpee,是的-
msgBox
获得焦点,但是在关闭
msgBox
后需要通过鼠标激活主窗口。这是什么?主窗口?请粘贴更多的代码…写一个插槽,当你的msgbox关闭时触发,并将焦点带回主窗口,怎么样?试过了吗?
//dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    void loadFile();


    ~Dialog();

private slots:
    void on_buttonLoad2_clicked();


private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

//dialog.cpp
//
#include "dialog.h"
#include "ui_dialog.h"

#include <QDebug>
#include <QXmlStreamReader>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QEvent>
#include <QDomDocument>
#include <QDomElement>
#include <QFile>
#include <QMessageBox>
#include <QMediaPlayer>
#include <QListWidgetItem>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    this->setFocusPolicy(Qt::StrongFocus);
    ui->setupUi(this);
}

void Dialog::loadFile()
{
    QString urlForXML = "http://apifree.forvo.com/key//format/xml/action/word-pronunciations/word/";
    urlForXML += ui->textHttp->toPlainText() + "/language/de";

    QNetworkAccessManager m_NetworkMngr;
    QNetworkReply *reply = m_NetworkMngr.get(QNetworkRequest(urlForXML));
    QEventLoop loop;
    connect(reply, SIGNAL(finished()),&loop, SLOT(quit()));
    loop.exec();

    QXmlStreamReader xmlReader;
    xmlReader.addData(reply->readAll());
    QString pathmp3Url;
    while(!xmlReader.atEnd()) // пока не конец потока...
    {
        xmlReader.readNextStartElement(); // читаем следующий открывающий элемент (тег)
        if (xmlReader.name() == "pathmp3") // если имя элемента "pathmp3"
        {
            pathmp3Url = xmlReader.readElementText();
            break;
        }
    }
    delete reply;

    if(pathmp3Url.count())
    {
        QNetworkAccessManager m_NetworkMngr2;
        QNetworkReply *reply2 = m_NetworkMngr2.get(QNetworkRequest(pathmp3Url));
        QEventLoop loop2;
        connect(reply2, SIGNAL(finished()), &loop2, SLOT(quit()));
        loop2.exec();

        QString qstring_mp3file = "/users/derkode/documents/forvoclient-mp3/" + ui->textHttp->toPlainText() + ".mp3";
        QFile mp3_file(qstring_mp3file);
        mp3_file.open(QIODevice::WriteOnly);
        mp3_file.write(reply2->readAll());

        QMediaPlayer *player = new QMediaPlayer;
        player->setMedia(QUrl::fromLocalFile(qstring_mp3file));
        player->setVolume(50);
        player->play();

        mp3_file.close();
        delete reply2;
    }
    else
    {
        QMessageBox *msgBox = new QMessageBox(this);
        msgBox->setText("Ok");
        msgBox->exec();
        this->setFocus();


    }

}

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


void Dialog::on_buttonLoad2_clicked()
{
    loadFile();
}