我首先要提到的是,以下工作正常到Qt 5.0.0 beta 1(也许是beta 2和RC也不知道),但在Qt 5.0.0最终版本中失败了.我只想参考Qt 5.0.0最终版本中看到的结果.所以很可能这与Qt5最近的变化有关.
在C++方面,我在命名空间中有一组类(QObject派生)(可选地用编译器标志触发;类在一个单独的库中,并且库将命名空间的使用作为选项留给用户使用图书馆).这里的一个类Game可能看起来像这样(摘录):
OAE_BEGIN_NAMESPACE
// forward-declarations:
class Player; // Player is just another class in the same library
class Game : public QObject
{
Q_OBJECT
public:
explicit Game(...);
public slots:
Player *player() const; // <-- the quesion is about such slots
};
OAE_END_NAMESPACE
Run Code Online (Sandbox Code Playgroud)
这些宏OAE_BEGIN/END_NAMESPACE扩展为namespace OAE_NAMESPACE {...... }或者没有,就像Qt所做的那样<qglobal.h>,只是在宏名称中用"OAE"替换"QT":
#ifndef OAE_NAMESPACE
# define OAE_PREPEND_NAMESPACE(name) ::name
# define OAE_USE_NAMESPACE
# define OAE_BEGIN_NAMESPACE
# define OAE_END_NAMESPACE
# define OAE_BEGIN_INCLUDE_NAMESPACE
# …Run Code Online (Sandbox Code Playgroud) 我正在进行QtQuick 2.0演示,我想嵌入一些代码示例.是否可以轻松创建突出显示qml元素的语法.
您能否举例说明如何实现它的示例技术和想法.
谢谢
我在Windows中安装了Qt5库,但Qt助手中没有关于Qt3D的文档.Qt3D是Qt5的一部分还是已从发行版本5中删除?
我目前正在将应用程序从Qt 4移植到Qt 5,并遇到WebView QML元素的一些问题.我可以成功将Google地图网页加载到WebView中,但该页面只响应单击或双击; 尝试单击拖动地图视图以平移可见区域无效.
以前,使用我的代码的Qt 4版本,我使用'pressGrabTime:0'WebView属性并欺骗用户代理以实现点击拖动功能.
我已经参考了Qt 5提供的MiniBrowser示例的源代码,它似乎生成模拟触摸事件以启用所需的功能.但是,示例代码使用了许多私有框架,我希望避免将其合并到我自己的代码中.
任何人都可以阐明为什么WebView元素不响应点击拖动事件,并建议一种克服这种情况的方法?
我有一个QTialog,用QT Designer创建,看起来像这样: 
左侧的服务器列表是带有QStringListModel的QListView.通过将视图的激活(QModelIndex)信号连接到对话框中的插槽功能,鼠标单击列表视图中的项目将使用所选项目的信息更新表单.
但是,向上或向下按键盘也会更改所选项目,但不会发出任何信号,因此表单不会更新以匹配所选项目.怎么解决这个问题?
将QML信号连接到常规C++插槽很容易:
// QML
Rectangle { signal foo(); }
// C++ old-style
QObject::connect(some_qml_container, SIGNAL(foo()), some_qobject, SLOT(fooSlot()); // works!
Run Code Online (Sandbox Code Playgroud)
但是,无论我尝试什么,我似乎都无法连接到C++ 11 lambda函数槽.
// C++11
QObject::connect(some_qml_container, SIGNAL(foo()), [=]() { /* response */ }); // fails...
QObject::connect(some_qml_container, "foo()", [=]() { /* response */ }); // fails...
Run Code Online (Sandbox Code Playgroud)
两次尝试都失败并出现函数签名错误(没有QObject :: connect重载可以接受这些参数).但是,Qt 5文档暗示这应该是可能的.
不幸的是,Qt 5示例总是将C++信号连接到C++ lambda插槽:
// C++11
QObject::connect(some_qml_container, &QMLContainer::foo, [=]() { /* response */ }); // works!
Run Code Online (Sandbox Code Playgroud)
这种语法不适用于QML信号,因为QMLContainer :: foo签名在编译时是未知的(并且手动声明QMLContainer :: foo会破坏首先使用QML的目的.)
我正在尝试做什么?如果是这样,QObject :: connect调用的正确语法是什么?
我使用此链接的分步教程构建了Android版Qt5:为Android 构建Qt 5.
现在,我能够构建和部署QWidget应用程序到我的nexus 7.但是如果我尝试用给定的QtCreator 2.7.1模板构建QtQuick应用程序,我会收到以下错误:
Project ERROR: Unknown module(s) in QT: quick qml
Run Code Online (Sandbox Code Playgroud)
我完全按照教程中的描述完成了每个构建步骤.还有其他人遇到过这个错误吗?
我正在尝试在Qt5中更改QAbstractButton(QPushButton或QCheckBox)的背景颜色并且没有运气.
这没有任何作用:
pButton->setAutoFillBackground(true);
QPalette palette = pButton->palette();
palette.setColor(QPalette::Window, QColor(Qt::blue));
pButton->setPalette(palette);
pButton->show();
Run Code Online (Sandbox Code Playgroud)
如果我尝试更改样式表:
pButton->setStyleSheet("background-color: rgb(255,255,0);");
Run Code Online (Sandbox Code Playgroud)
然后Qt举起双手,画出一个看起来很粗糙的块状按钮.
有一个标题为" 如何更改QWidget的背景颜色 "的页面,但它只讨论了这两种方法.
还有一个页面" Qt Style Sheets Examples "暗示如果你想改变背景颜色,你必须接管绘制按钮的所有方面,这看起来有点矫枉过正.
我需要这个在Mac,Windows和Ubuntu Linux上运行,如果我必须手动绘制关于按钮的所有内容3次(每个平台一次),这真的不是一件幸福的事情.
我错过了一些明显的东西吗
ps"背景颜色"是指按钮周围的区域,而不是按钮面上文本下的颜色.
我正在OSX Mavericks上编写新手Qt5代码,并且想要覆盖给定小部件的StyleSheet的一个属性:值对.
如果我运行以下自包含的演示代码:
#include <QApplication>
#include <QMainWindow>
#include <QtGui>
#include <QPushButton>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
QPushButton* AButton = new QPushButton( "A Button", mw );
mw->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个很好的按钮,默认为Macintosh风格 - 圆角,按下时标准OSX-蓝色等:

但是,如果我设置样式表以使背景按钮颜色为红色,那么在此过程中我似乎失去了所有其他OSX样式默认值 - 没有更多的圆角,标准边距等:
#include <QApplication>
#include <QMainWindow>
#include <QtGui>
#include <QPushButton>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
QPushButton* AButton = new QPushButton( "A …Run Code Online (Sandbox Code Playgroud)