QT之一些小問題
阿新 • • 發佈:2018-12-09
關於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中實現解構函式,程式執行正常。特記錄