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

标签 c++ qt qt-designer qtgui qmessagebox

关闭 MessageBox 后焦点不会返回到窗口。我试过了:

QMessageBox msgBox;
msgBox.setText("Ok");
msgBox.exec();
this->setFocus();

如何将焦点返回到主窗口(this)?

//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();
}

最佳答案

this->parent()->setFocus();在 msgBox->exec() 之后(接近代码末尾)

关于c++ - 如何将焦点返回到窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849685/

相关文章:

c++以错误的方式传递值?

c++ - 为什么c++中的main()函数不用调用,反正运行了?

c++ - 带 QScrollArea 的滚动条

python - 布局内容更改后将 QMainWindow 调整为最小尺寸

c++ - 如何在 Qt Designer 中使用 Qt 的示例 Borderlayout?

c++ - 通过qtcreator/qtdesigner给QMenu添加QWidgetAction

c++ - 我们应该如何解释带有嵌入式逗号的宏

c++ - GridFS 对 mongocxx(mongodb c++ 驱动程序)的 MD5 支持

c++ - Mac OSX 下 Eclipse CDT 与 Qt 交叉编译

qt-designer - Qt 设计器 : Cannot change the font size