小编Ole*_*zan的帖子

使用BundleUtiliies CMake MacOS X捆绑用于Qt应用程序

我是一名CMake初学者,并且在为MacOS X创建Qt应用程序包时遇到了问题.让我们在一个main.cpp文件中考虑一个简单的小部件"helloworld"应用程序.

// main.cpp
#include <QApplication>
#include <QLabel>

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QLabel lbl("Hello");
    lbl.show();
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt文件也很简单.

# CMakeLists.txt
cmake_minimum_required( VERSION 3.0 )
project( QtBundle )    
set( CMAKE_INCLUDE_CURRENT_DIR ON )
set( CMAKE_AUTOMOC ON )

set( SOURCES main.cpp )    
find_package( Qt5Widgets REQUIRED )

add_executable( ${PROJECT_NAME} MACOSX_BUNDLE ${SOURCES} )    
qt5_use_modules( ${PROJECT_NAME} Widgets )
Run Code Online (Sandbox Code Playgroud)

我跑cmake .. -DCMAKE_PREFIX_PATH=/path/to/Qt5.5.1/,它Makefilebuild目录中生成.

然后我运行make并拥有QtBundle.app我想要和QtBundle.app/Contents/MacOS/QtBundle可执行的目录,好的.

但是当我启动它时,我得到:

This application …
Run Code Online (Sandbox Code Playgroud)

c++ macos qt bundle cmake

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

QWebEngine和QWebChannel:页面重新加载后传输对象`qt.webChannelTransport`消失了

我在我的应用程序之间创建了一个Web通道WebEngine,以便QObject在JavaScript中暴露在Web端,但是在页面重新加载后或者如果我单击链接到另一个页面时,通道会丢失.

我想我需要在页面重新加载时重新创建频道,但我没有设法做到这一点.我尝试在页面加载,进度和完成的插槽上执行此操作但只得到了js: Uncaught ReferenceError: qt is not defined.

<!-- language: lang-cpp -->
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->webEngineWidget->load(QUrl("qrc:/index.html"));
    page = ui->webEngineWidget->page();

    channel = new QWebChannel;
    channel->registerObject("external", &exposedObject);
    page->setWebChannel(channel);

    connect(page, &QWebEnginePage::loadStarted, this, &MainWindow::onPageLoadStarted);
    connect(page, &QWebEnginePage::loadProgress, this, &MainWindow::onPageLoadProgress);
    connect(page, &QWebEnginePage::loadFinished, this, &MainWindow::onPageLoadFinished);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onPageLoadStarted()
{
    qDebug() << "Loading started";
}

void MainWindow::onPageLoadProgress(int progress)
{
    qDebug() << "Loading in progress: " << progress;
}

void MainWindow::onPageLoadFinished()
{
    qDebug() …
Run Code Online (Sandbox Code Playgroud)

javascript c++ sockets qt qtwebengine

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

标签 统计

c++ ×2

qt ×2

bundle ×1

cmake ×1

javascript ×1

macos ×1

qtwebengine ×1

sockets ×1