我在Windows中安装了Qt5库,但Qt助手中没有关于Qt3D的文档.Qt3D是Qt5的一部分还是已从发行版本5中删除?
我有一个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调用的正确语法是什么?
我正在寻找一种方法来在qtquick 2.0项目中呈现我的自定义opengl调用.为了给你一些上下文:我有一个使用opengl进行渲染的C++ 3d引擎.目标是让它在qtquick 2.0 UI中呈现.
我发现的是pre qt 5.0(qtquick 2.0)你会使用QtGlWidget并将其嵌入到QDeclarativeView中.我发现的另一种方法是使用QtDeclarativeItem并覆盖void QDeclarativeItem :: paint(QPainter*p,const QStyleOptionGraphicsItem*o,QWidget*w)方法.
据我了解,这是不可能的,因为QtQuick 2.0使用基于OpenGl的新渲染器.因此,它似乎不像重写油漆方法那么容易.
有谁知道如何实现一个允许渲染我的opengl调用的QQuickItem?
官方下载现在仅包括VS 2010的Qt库5.0.0.我在VS 2012 Express中尝试了它们,但收到错误消息"错误:LNK2038:检测到'_MSC_VER'不匹配:值'1600'与值'1700'不匹配......"
我是否必须在VS 2012中安装VS 2010或编译Qt5的完整源代码?
更新:我的IDE是Qt Creator 2.6.1.我只在VS 2012中使用C++编译器,因为在官方下载中还没有用于minGW的Qt库5.0.0 .
UPDATE-2(2013-1-1):今天看到它,官方博客说:
我们还在为5.0系列做一些事情.我们有想要解决的错误.我们目前没有MinGW的二进制包(因为WebKit尚未使用它)和MSVC 2012(您需要从源代码编译),我们将尽快提供这些包.目前的计划是在1月底之前的某个时间发布第一个补丁级别5.0.1.
UPDATE-3(2013年1月31日): 那说到最后,但只增加的Qt 5.0.1 MinGW的4.7.
UPDATE-4(2013-7-06):经过漫长的等待,Qt 5.1.0 for Windows 32-bit(VS 2012,511 MB)增加了.
为了符合Qt的LGPL许可证,使用Qt库的应用程序必须使源代码可用或动态链接到Qt(如果我用这几个字正确地得到了它).
所以我想创建一个完全正确的闭源应用程序.另外,我想在Linux(目前是Xubuntu 12.04)上使用支持C++ 11的g ++/MinGW来开发Windows二进制文件.我按照这个有用的指南来完成后者.但正如指南还指出的那样,创建了静态链接的可执行文件.
由于我使用MXE自动下载和构建Qt库(版本5.0),因此我没有太多机会影响该过程.所以我的问题是,如何创建Qt库和相应应用程序的动态链接版本?
使用旧语法,可以转发信号,例如:
connect(sender, SIGNAL(valueChanged(QString,QString)), this, SIGNAL(updateValue(QString,QString)));
Run Code Online (Sandbox Code Playgroud)
我喜欢使用新的Qt5语法.是否可以使用新语法转发信号?
在使用Qt5(来自WId)的Windows上获取HWND的答案之一中,建议使用QPlatformNativeInterface以恢复本机窗口处理程序.
要访问QT标头,尽管示例使用其完整路径:
#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h>
Run Code Online (Sandbox Code Playgroud)
当然,这不是一个明确的解决方案.有没有办法使用QT的默认包含系统包含QPlatformNativeInterface?
请注意,都没有
#include <QPlatformNativeInterface>
Run Code Online (Sandbox Code Playgroud)
工作(在默认QT构建期间不生成此文件)
也不
#include <QGuiApplication>
Run Code Online (Sandbox Code Playgroud)
作品(仅包含QPlatformNativeInterface的前向声明 )
根据Qt文档,如果我们想在Windows上使用命名管道,我们可以使用QLocalSocket.我正在用Qt编写服务器和客户端程序.如果我尝试使用WIN32 API在管道中写入一些消息,Qt客户端不会显示它.此外,如果客户端再次使用WIN32 API进行写入,则Qt服务器不会回显发送的消息.QLocalSocket真的推荐用于命名管道吗?
这是Win32 Server代码
wcout << "Creating an instance of a named pipe..." << endl;
// Create a pipe to send data
HANDLE pipe = CreateNamedPipeW(
L"\\\\.\\pipe\\ServicePipe", // name of the pipe
PIPE_ACCESS_OUTBOUND, // 1-way pipe -- send only
PIPE_TYPE_BYTE, // send data as a byte stream
100, // only allow 1 instance of this pipe
0, // no outbound buffer
0, // no inbound buffer
0, // use default wait time
NULL // use default security attributes
); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个简单的QML应用程序,我注意到,与QML窗口相比,调整大小和移动窗口会产生难看的闪烁QtWidgets.
所以我创建了2个测试应用程序来显示差异:
QWidgets:

QML:

正如您所看到的那样QML,应用程序的版本闪烁得非常难看,而QtWidgets一个版本很干净.当你的用户界面越来越复杂时,现在这变得非常难看.
你对此有什么了解吗?这是一个错误吗?针对此问题是否有任何修复/解决方法?