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的。。不过装了这一样再没提示了)
2 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属性,这样就可以实现透明窗口效果!