Qt工程相关问题杂集

其实本博文的内容并非本人原创,而是本人对最近遇到的一些典型问题解决方案的综述,绝大部分是综合网上的相关内容而得。

1 解决Unable to locate theme engine in module_path: "pixmap"

Gtk-WARNING **: Unable to locate theme engine in module_path: "pixmap"

纳闷老是弹这东东出来,虽然。。。貌似不影响什么,可是看着不爽

好吧,Google到launchpad,有人提交bug,在讨论里有人说

装下那个engines就好了,就那么一行。。。

sudo apt-get install gtk2-engines-pixbuf 

(在ubuntu 11.10下没发现有gtk3的。。不过装了这一样再没提示了)

qt主窗口隐藏后,关闭子窗口,主程序退出

问:我写了一个简单的后台程序,发现一个问题,在我隐藏主窗口后如果有子窗口弹出如QMessageBox::information,若关闭该弹出的子窗口,就会导致主窗口也被关闭。

这样我的后台程序就无法弹出任何对话框了,否则主程序会在子窗口关闭后退出,不知道大家有没有遇到一样的问题?怀疑是BUG或者设计缺陷

答:1. 不是bug 2. 不是缺陷 3. 多看Manual: QApplication 之 quitOnLastWindowClosed

当最后一个窗体被关闭,应用程序就结束了。QApplication' 的quitOnLastWindowClosed 属性设为 false,程序会一直运行,直到我们调用QApplication::quit()

3 Can’t set WA_TranslucentBackground to a QWidget

下看如下一段代码:

#include <QtWidgets/QApplication>
#include <QtDeclarative/qdeclarative.h>
#include <QtDeclarative/qdeclarativeview.h>
#include <QLabel>

int main(int argc, char *argv[])
{
    QScopedPointer<QApplication> app(new QApplication(argc, argv));
    QWidget w;
    
    w.resize(500, 400);
    QPalette palette = w.palette();
    palette.setColor(QPalette::Base, Qt::transparent); 
    w.setPalette(palette);
    w.setAttribute(Qt::WA_TranslucentBackground);  //this line will make the program crash
    w.setWindowFlags(Qt::FramelessWindowHint);
    QLabel *label = new QLabel("Some label", &w);
    label->setObjectName("label");
    w.show();
    
    return app->exec();
}

该段代码是典型的使窗口透明的方法,在Qt4下它确实能正常工作,但是在Qt5下它的表现很不正常,我在win7 64位下的效果是:窗口不能显示,只在任务栏有相应程序的图标,

但是单击该图标主程序不能显示,还有一些人说会导致崩溃,这个我倒没发现,中文的基本上没有搜索到解决方案,最后在http://qt-project.org/forums/viewthread/24344/

上找到解决方案,要点如下:

Form::Form(QWidget *parent) :
    QWidget(parent, Qt::FramelessWindowHint)
{
    setAttribute(Qt::WA_TranslucentBackground);
    ui.setupUi(this);
}

新建一个类继承QWidget,在调用setupUi(this)之前就设置Qt::WA_TranslucentBackground属性,这样就可以实现透明窗口效果!

 

 

 

 

posted @ 2013-04-09 20:33  weiwei22844  阅读(418)  评论(0编辑  收藏  举报