1. 程式人生 > >QT之一些小問題

QT之一些小問題

關於dockwidget

dockwidget是可拖動佈局,它父佈局只能在mainwindow中,若是其他佈局,雖然可以顯示,但是無法拖動。
我們想去恢復dockwidget的原位置可以用以下方法:

    //view隱藏則顯示
    if(ui->dockWidget->isHidden()){
        ui->dockWidget->show();
    }
    //重置dockwidget位置,以下程式碼來自於QT Creator自動生成
    MainWindow->addDockWidget(static_cast<Qt::DockWidgetArea>(2), dockWidget);

修改程式碼,達到我想要的結果,addDockWidget,第一個引數是位置,第二個引數是dockWidget指標。

terminate called after throwing an instance of ‘std::bad_alloc’

what(): std::bad_alloc
引起原因:在申請大量記憶體,卻沒有回收。仔細想想程式在什麼地方使用了大記憶體,但是沒有回收,找到地方,然後及時回收記憶體。或者是在往記憶體中一次性讀取大量資料,可以試試分多次載入。(在資源管理器可以看見你的程式所佔記憶體在慢慢升高)

設定開機自啟後QSetting置配檔案都不到?

開機自啟後,發現配置檔案讀取不到,原來setting的位置在”C:/WINDOWS/system32/setting.conf”下,解決辦法,判斷是手動啟動或者是開機自啟。
建議直接寫絕對路徑。。

多國語言載入不起作用

qt的多國語言支援非常方便,具體的步驟不做介紹,下面是一段程式碼

void initLanguage(){
    QSettings* settings = 0;
    QString dirStr = QCoreApplication::applicationDirPath()+"/language";
    QDir dir(dirStr);
    if(dir.exists()){
        settings = new QSettings(dirStr+"/language.ini",QSettings::IniFormat);
        if(settings->value("language").toString().length()==0){
            settings->setValue("language","ch");
        }else if(settings->value("language").toString().compare("en")==0){
            QTranslator translator;
            bool ss = translator.load(dirStr+"/en.qm");
            bool aa = qApp->installTranslator(&translator);
            qDebug()<<"load english language"<<ss<<" "<<aa;
        }
        delete settings;
    }
}

輸出載入成功,但是就是不顯示英文,最終解決辦法

    static QTranslator translator;

歐克,執行沒問題了

程式奔潰

程式奔潰一般都是程式異常引起,空指正、除零。。。。
今天遇到一個很奇妙的問題,在QT creator中,建立了兩個工程,這兩個工程都要用同一個類,我用的土辦法,直接拷貝。
但是,有一個問題是,在兩個工程都開啟時,點選一個工程的.h檔案,跳轉到另一個工程的.cpp檔案,好吧,當這是creator的bug,不管了。
然後繼續編碼,在a工程.h中,聲明瞭解構函式,點選a的.h檔案,跳轉到b工程的.cpp中,沒注意,實現了解構函式,結果程式居然順利編譯通過,然後執行時出了bug,找了老半天才找到這個原因,關掉b工程,a.cpp中實現解構函式,程式執行正常。特記錄