2010-08-16 39 views
1

Je n'arrive pas à faire en sorte que setWindowFilePath fonctionne dans tous mes projets. La valeur est stockée et peut être récupérée, mais elle n'apparaît jamais dans la barre de titre de mon application. Cela fonctionne correctement dans un exemple d'application que j'ai téléchargé, mais je ne trouve pas ce qu'ils font différemment. Quoi qu'il en soit, voici une application simple que j'ai créée pour montrer le problème. J'ai collé le code des 3 fichiers, mainwin.h, main.cpp, et mainwin.cpp ci-dessous.comment utiliser Qt setWindowFilePath

Des idées? J'utilise Qt 4.6.3 sur Windows 7, avec le compilateur MS.

#ifndef MAINWIN_H 
#define MAINWIN_H 

#include <QMainWindow> 

class mainwin : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    explicit mainwin(QWidget *parent = 0); 

signals: 

public slots: 

}; 

#endif // MAINWIN_H 

#include "mainwin.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    app.setApplicationName("my test"); 
    app.setOrganizationName("NTFMO"); 
    mainwin window; 
    window.show(); 
    return app.exec(); 
} 

#include "mainwin.h" 

mainwin::mainwin(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    setWindowFilePath("C:\asdf.txt"); 

} 

Répondre

1

Pour une raison quelconque, setWindowFilePath() ne semble pas fonctionner lorsqu'il est appelé à partir du constructeur de QMainWindow. Mais vous pouvez utiliser la minuterie de prise de vue unique:

class mainwin : public QMainWindow 
{ 
... 
private slots: 
    void setTitle(); 
} 

mainwin::mainwin(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QTimer::singleShot(0, this, SLOT(setTitle())); 
} 

void mainwin::setTitle() 
{ 
    setWindowFilePath("C:\\asdf.txt"); 
} 

Et rappelez-vous d'utiliser \\ dans les chemins littérales au lieu de \

+0

merci, ça l'a fait! Et merci pour le rappel sur \\ au lieu de \ –

0

Je viens de découvrir que, avec QTimer :: SingleShot, apparemment il n'y a aucun moyen de passer des paramètres. Pour passer des paramètres (dans mon cas, le chemin du fichier récupéré à l'aide QSettings), utilisez:

QMetaObject::invokeMethod(this, "Open", Qt::QueuedConnection, Q_ARG(QString, last_path)); 
2

Il est QTBUG-16507.

Et compréhension simple (juste testé dans mon projet) est:

/********************** HACK: QTBUG-16507 workaround **************************/ 
void MyMainWindow::showEvent(QShowEvent *event) 
{ 
    QMainWindow::showEvent(event); 
    QString file_path = windowFilePath(); 
    setWindowFilePath(file_path+"wtf we have some random text here"); 
    setWindowFilePath(file_path); 
} 
/******************************************************************************/ 

Il vient de mettre le titre à la valeur que vous avez utilisé avant émission widget (dans le constructeur, dans votre cas). Fonctionne comme un charme.

+0

On dirait que ce bug est corrigé. Au moins, je ne peux plus le reproduire dans Qt 5.0.2. –