如何在C4Droid中编译简单的Qt5.2项目 我想知道如何在C4DROID中构建和编译一个简单的QT项目,C+Delphi是一个Android的C++编译器。
该程序附带了两个简单的示例:一个“Hello world”标签(一个文件)和一个示例记事本。第二个看起来很有趣,但它处理的表单完全是从代码创建的 我正在调查是否可以对从.ui文件生成的表单执行此操作。我在QtCreator中为Qt4.8创建了一个简单的项目,编译了.ui表单,并将代码从Qt4.8改编为Qt5.2。项目本身非常简单:一个带有QButton和QLineEdit的表单。按下QButton时,QLineEdit中会显示“Hello world” 据我所知,C4Droid不解析.pro文件。要编译项目,我必须打开main.cpp并长按“编译”,选择“编译多个源代码文件(简单)”,然后运行。C4droid使用自己的“makefile”文件,即.C4droid文本文件 以下是我在C4droid测试文件夹中发布的文件: ButtonHelloWorld.pro:如何在C4Droid中编译简单的Qt5.2项目 我想知道如何在C4DROID中构建和编译一个简单的QT项目,C+Delphi是一个Android的C++编译器。,android,c++,qt,Android,C++,Qt,该程序附带了两个简单的示例:一个“Hello world”标签(一个文件)和一个示例记事本。第二个看起来很有趣,但它处理的表单完全是从代码创建的 我正在调查是否可以对从.ui文件生成的表单执行此操作。我在QtCreator中为Qt4.8创建了一个简单的项目,编译了.ui表单,并将代码从Qt4.8改编为Qt5.2。项目本身非常简单:一个带有QButton和QLineEdit的表单。按下QButton时,QLineEdit中会显示“Hello world” 据我所知,C4Droid不解析.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ButtonHelloWorld
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ButtonHelloWorld
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
main.cpp:
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
ui_main window.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_ButtonSayHello_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QAction>
#include <QApplication>
#include <QButtonGroup>
#include <QHeaderView>
#include <QLineEdit>
#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralWidget;
QVBoxLayout *verticalLayout;
QPushButton *ButtonSayHello;
QLineEdit *LeditSayHello;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(198, 103);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
verticalLayout = new QVBoxLayout(centralWidget);
verticalLayout->setSpacing(6);
verticalLayout->setContentsMargins(11, 11, 11, 11);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
ButtonSayHello = new QPushButton(centralWidget);
ButtonSayHello->setObjectName(QString::fromUtf8("ButtonSayHello"));
verticalLayout->addWidget(ButtonSayHello);
LeditSayHello = new QLineEdit(centralWidget);
LeditSayHello->setObjectName(QString::fromUtf8("LeditSayHello"));
LeditSayHello->setAlignment(Qt::AlignCenter);
verticalLayout->addWidget(LeditSayHello);
MainWindow->setCentralWidget(centralWidget);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
ButtonSayHello->setText(QApplication::translate("MainWindow", "Say Hello", 0));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_ButtonSayHello_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
然后,在C4droid中,我打开application.pro,长按“Compile”。挑选
“Makefile”编译模式和“Qt应用程序”运行模式,并放置
可执行文件“application.so”。它编译正常,但失败
“复制文件失败”
但如果我把“libapplication.so”作为可执行文件,它会编译
没问题
为什么
他:
因为在Android上,Qt可执行文件总是命名为libXXX.so
我:
嗯,我试过“libappli.so”,但也犯了同样的错误
但是,通过调查,我发现可执行文件名必须是
lib[NameOf.proFileWithoutExtension].so,它是文件夹名
独立的。现在你复制的例子和我的工作
而且,他告诉我,一旦编译完成,将其导出到一个.APK,就像菜单->导出一样简单。我试过了,而且。。。太神奇了
结论
解决了。回答我自己的问题是为了帮助其他处于同样处境的人。您忘记处理元对象编译器,简称“moc”,用于主窗口的文件。否则,QObject机制将无法正常工作 您需要执行以下任一操作:
moc -o mainwindow.moc mainwindow.h
g++ ... mainwindow.moc
作为构建过程的一部分,即通过显式运行moc扩展Makefile,并将*.moc模式添加到要编译的文件列表中,或者单独运行编译器命令
或者,C4Droid似乎从3.49版开始就支持qmake项目文件。这个答案可以看作是 在C4droid中编译和导出Qt项目的迷你教程。 如何在C4DROID中构建和编译一个简单的QT项目,C4DROID是一个Android的C++编译器? 我在QtCreator中为Qt4.8创建了一个简单的项目,编译了.ui表单,并将代码从Qt4.8改编为Qt5.2。项目本身非常简单:一个带有QButton和QLineEdit的表单。按下QButton时,QLineEdit中会显示“Hello world” 以下是我在C4droid测试文件夹中发布的文件: ButtonHelloWorld.pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ButtonHelloWorld
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ButtonHelloWorld
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
main.cpp:
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>198</width>
<height>103</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="ButtonSayHello">
<property name="text">
<string>Say Hello</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="LeditSayHello">
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
主窗口
0
0
198
103
主窗口
打招呼
Qt::AlignCenter
现在,从C4Droid打开ButtonHelloWorld.pro或main.cpp。长点击编译,选择“Makefile”编译模式和“Qt应用程序”运行模式,选择“libButtonHelloWorld.so”作为可执行文件
这一点很重要:在Android中,Qt可执行文件总是命名为libXXX.so可执行文件名必须是lib[NameOf.proFileWithoutExtension].so,并且它是独立的文件夹名
编译和测试后,它运行正常,将其导出到.APK非常简单,只需菜单->导出即可
我试过了,而且。。。太神奇了
PS:如果你想知道moc、qmake、rcc和uic可执行文件在哪里,它们在/data/data/com.n0n3m4.droidc/files/gcc/qt/bin/文件夹中(至少在我的android中是这样)。因此,你必须通过运行“moc-o mainwindow.moc inputfile”来创建moc文件,然后像往常一样编译生成的moc文件,例如
g++。。。mainwindow.moc
。根据您的建议,我进入了Terminal,进入我的项目文件夹,键入:/data/data/com.n0n3m4.drodc/files/gcc/qt/bin/moc mainwindow.h-o mainwindow.h.moc。之后,我就没有机会编译了。我还应该做什么呢?我不知道什么是不走运,但就像我之前说的,你必须做两个步骤,你只做了一个。你读过我评论的这一部分吗<然后像往常一样编译生成的moc文件,例如g++。。。mainwindow.moc.我问过C4droid开发人员,他的回答是(刚才):“C4droid可以解析.pro文件,仔细看示例。Google Play上的描述是唯一可用的教程,但已经足够了。”我将再次回顾这两个教程(再一次)基本上已经有官方教程了。。。令人惊讶的是,你竟然没有把它联系起来我在谷歌上搜索了很多,但什么都没找到。Google Play中只有应用程序描述可用,但对我来说太简洁和不清楚了。告诉我你所指的链接,我会很乐意把它包括在我的帖子里。