QT之一些小问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25034451/article/details/79901057

关于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中实现析构函数,程序运行正常。特记录

猜你喜欢

转载自blog.csdn.net/qq_25034451/article/details/79901057
今日推荐