相关疑难解决方法(0)

如何使用Qt的PIMPL习语?

PIMPL代表P ointer到IMPL ementation.实现代表"实现细节":类的用户不必关心的东西.

Qt自己的类实现通过使用PIMPL惯用法将接口与实现完全分开.然而,Qt提供的机制没有记录.怎么用?

我想这是关于Qt中"我如何进行PIMPL"的规范性问题.答案将由下面显示的简单坐标输入对话框界面激发.

当我们有任何半复杂的实现时,使用PIMPL的动机就变得明显了.这个问题给出了进一步的动机.即使是一个相当简单的类也必须在其界面中引入许多其他头文件.

对话截图

基于PIMPL的接口非常干净且易读.

// CoordinateDialog.h
#include <QDialog>
#include <QVector3D>

class CoordinateDialogPrivate;
class CoordinateDialog : public QDialog
{
  Q_OBJECT
  Q_DECLARE_PRIVATE(CoordinateDialog)
#if QT_VERSION <= QT_VERSION_CHECK(5,0,0)
  Q_PRIVATE_SLOT(d_func(), void onAccepted())
#endif
  QScopedPointer<CoordinateDialogPrivate> const d_ptr;
public:
  CoordinateDialog(QWidget * parent = 0, Qt::WindowFlags flags = 0);
  ~CoordinateDialog();
  QVector3D coordinates() const;
  Q_SIGNAL void acceptedCoordinates(const QVector3D &);
};
Q_DECLARE_METATYPE(QVector3D)
Run Code Online (Sandbox Code Playgroud)

基于Qt 5,C++ 11的接口不需要该Q_PRIVATE_SLOT行.

将其与非PIMPL接口进行比较,该接口将实现细节隐藏在接口的私有部分中.请注意必须包含多少其他代码.

// CoordinateDialog.h
#include <QDialog>
#include <QVector3D>
#include <QFormLayout>
#include <QDoubleSpinBox>
#include <QDialogButtonBox>

class CoordinateDialog : …
Run Code Online (Sandbox Code Playgroud)

c++ qt pimpl-idiom

50
推荐指数
1
解决办法
1万
查看次数

如何为Qt应用程序创建可执行文件?

我一直在互联网上搜索有关这方面的一些有用且清晰的信息,令人讨厌的是,这样一件微不足道的事情很难做到.

我需要的是为我的Qt项目创建一个可执行文件,以便在其他计算机上运行它.我的项目在Qt Creator中运行得很好,但是当我尝试运行在release文件夹中创建的可执行文件时,我得到了一些dll丢失的错误,虽然我已将它们全部放在我的.exe的同一目录中但我现在得到了一些关于dll(QtCore4.dll)中的程序中的入口点的错误.

该解决方案看起来像是一个静态链接,我发现了很多关于它的信息,但它们都没有真正帮助我.这是我到目前为止所尝试的:

  • 如上所述,使用在release文件夹中创建的可执行文件.
  • 静态链接,遵循本教程(以及其他许多内容,几乎都是一样的):http://doc.qt.io/qt-4.8/deployment-windows.html但是在"configure -static"期间我收到以下错误:NMAKE:致命错误U1077:'"c:\ Arquivos de programas\Microsoft Visual Studio 9. 0\VC\BIN\cl.EXE"':返回代码'0x2'停止.构建qmake失败,返回代码2

为此,我找不到任何解决方案,所以我在这里,只是尝试为我的Qt项目创建一个可执行文件,希望你们能在这里给我一些启示.

c++ windows qt visual-studio

18
推荐指数
2
解决办法
6万
查看次数

如何使Qt和Qtcreator静态链接库而不是动态?

我知道这可能是一个类似于其他许多问题的问题,但经过多次搜索并且未能获得明确有效的解决方案后,我不得不提出这个问题.

我正在使用Qt 5.2.0 for Windows 32位(VS 2010,570 MB),我已经完成了我的编程,而且一切都完成了.但是现在我想将它作为.exe文件分发给我的同事,但是这样做没有复杂性并且为了避免分发dll文件我需要使用静态链接来构建程序.

您能否描述一下我如何使用静态链接构建整个程序的Qt 5.2.0 for Windows 32-bit(VS 2010,570 MB)

谢谢.

c++ qt qt-creator

18
推荐指数
1
解决办法
5万
查看次数

如何静态构建Qt 5

我在Linux环境中使用基于Qt 5.0.1的Qt Creator 2.6.2.应用程序在我编译的计算机上工作正常,但是当我在另一台计算机上执行它时,我得到的错误如下:

error while loading shared libraries: libQt5WebKitWidgets.so.5: cannot open shared object file: No such file or directory
error while loading shared libraries: libxslt.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在这个链接中找到了一些解决方案(一些链接已经死了).

所以我在我的.pro文件中添加了这一行:

CONFIG += static
Run Code Online (Sandbox Code Playgroud)

静态编译我的项目.

我以为我得到的文件会更大,但我有相同的大小和相同的错误.

谢谢.

c++ linux qt gcc qt5

13
推荐指数
1
解决办法
1万
查看次数

如何在没有安装Qt的情况下运行Qt程序?

我用Qt5.3.1编写了一个程序,并在我的开发机器上运行它可以正常工作.我将所有必需的.dll文件复制到我的.exe所在的文件夹中.这些是:

  • Qt5Widgets.dll
  • Qt5Network.dll
  • Qt5Gui.dll
  • Qt5Core.dll
  • icudt51.dll
  • icuin51.dll
  • icuuc51.dll
  • libgcc_s_dw2-1.dll
  • libwinpthread-1.DLL
  • 的libstdc ++ - 6.dll

现在我想在没有安装Qt的机器上运行该程序.我怎么做?用户不必为了使用程序而安装IDE,对吗?

开发机器的工作原理:

  • Windows 8
  • Qt 5.3.1

部署平台是:

  • Windows Vista
  • 没有安装Qt,但所有必要的.dll都已到位

我得到的错误是第一个:

此应用程序无法启动,因为它无法找到或加载Qt平台插件"windows".重新安装应用程序可能会解决此问题.

下一条错误消息是:

此应用程序请求运行时以不寻常的方式终止.请联系支持.

然后程序崩溃了. 但是如果我安装Qt5.3.1就可以了.所以它是与文件的c:/Qt目录

c++ windows deployment qt qt5

7
推荐指数
3
解决办法
8107
查看次数

无法在另一个Linux系统上运行可执行二进制文件?

我正在使用Ubuntu 10.04和Qt4.6,并且我已经通过QtCreator在我自己的计算机上创建了一个可执行的二进制文件.

现在我想将我的可执行文件放在CentOS 5上,但似乎这个可执行文件无法在CentOS上运行.

错误消息是

bash: ./[filename]: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)

现在我知道这来自32位和64位问题,并成功创建了32位可执行文件.

但是,由于动态链接问题,这个可执行文件仍然无法在CentOS上运行,它总是显示:

Error while loading shared libraries: libQtGUI.so.4: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我试图在.pro文件中添加"-static"标志

QMAKE_CFLAGS_RELEASE    += -Os -static
QMAKE_CPPFLAGS_RELEASE  += -Os -static
QMAKE_CXXFLAGS_RELEASE  += -Os -static
QMAKE_CCFLAGS_RELEASE   += -Os -static
Run Code Online (Sandbox Code Playgroud)

然而,看起来它只生成"静态二进制"而不是"静态链接",依赖性仍然存在.

我还尝试在.pro文件中添加以下行:

QMAKE_LFLAGS += static
Run Code Online (Sandbox Code Playgroud)

但是这个项目在执行此操作后无法编译.我没有权限在Cent OS上安装Qt,如何用静态链接编译这个项目,以便可执行文件可以独立运行?

谢谢你的帮助!

c++ qt cross-platform qt4 qt-creator

6
推荐指数
1
解决办法
4690
查看次数

没有.NET框架,GUI简单快捷吗?

是否有任何方法可以在Visual Studio中以相同的快速简便方式构建图形界面,但没有.NET Framework?我正在寻找本机Windows GUI,因此使用Qt与Qt Creator不是一个选项(并且它不需要是跨平台的).使用C++的Windows API的东西会很棒(不是Delphi).

我的意思是,像WinSCP这样的应用程序真的有完全手工编写的GUI吗?

c++ windows user-interface native

6
推荐指数
1
解决办法
5069
查看次数

使用Qt进行静态构建(独立应用程序)

我开始和Qt一起回来了.我已经下载了Windows 32位版本(666mB),没有别的.我做了一个简单的计算器应用程序.当我从Qt创建者运行它时,应用程序运行,但内置的exe显示dll丢失.我不想使用依赖walker.我想创建一个静态构建(我读过它,但我无法让它运行)

我的目标是制作一个功能齐全的计算器(无安装程序),而无需手动添加依赖项.我已经阅读了有关configure -static的内容,但我不明白如何使用它.在此先感谢您的帮助.

c++ qt static

6
推荐指数
1
解决办法
1万
查看次数

如何静态链接 Qt 库?

我想将 Qt 库静态链接到我的程序,以便它可以在我学校的计算机上运行。我们没有打算在这些计算机上安装任何东西,因此静态链接是我唯一的机会。

到目前为止,这是我的 cmake 文件

cmake_minimum_required(VERSION 3.9)

project(Calculator)

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -Wall -Wpedantic -Wextra -std=gnu++14 -no-pie -fPIC  -static -lQt5Widgets -lQt5Gui -lQt5Core")

find_package(Qt5Widgets REQUIRED)
include_directories(/usr/include/qt/QtWidgets /usr/include/qt /usr/include/qt/QtGui /usr/include/qt   /usr/include/qt/QtCore /usr/include/qt)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

add_executable(${PROJECT_NAME} main.cpp calculator.cpp  resources.qrc calculatestring.cpp )
Run Code Online (Sandbox Code Playgroud)

这是我尝试运行此 cmake 文件时得到的结果:-

/bin/ld: cannot find -lQt5Widgets
/bin/ld: cannot find -lQt5Gui
/bin/ld: cannot find -lQt5Core
Run Code Online (Sandbox Code Playgroud)

如果我删除-static标志,它编译得很好,但只能在安装了 qt 的机器上运行。

当我尝试在没有安装 qt 的 Arch Linux 的 VirtualMachine 上运行它时,它给了我错误:-

error while loading shared libraries : libQt5Widgets.so.5: …
Run Code Online (Sandbox Code Playgroud)

c++ qt static-linking

1
推荐指数
1
解决办法
3330
查看次数