Site Overlay

QT 开发踩坑记录

Qt Creator 是我见过最狗屎的 IDE。唯一的优点是 AutoComplete。

Error

error: 'QWidget' file not found

open file .pro

append line:

QT += widgets

use of undeclared identifier 'Ui'

检查 Ui 命名空间在哪儿定义的。

variable has incomplete type 'Expx::FramelessWindow'

这种属于前置声明问题:

namespace Fuck{
    class FuckClass;
}

undefined reference to xxx

如果 xxx 是你自己的类型,通常是找不到 h 对应的 cpp 实现。

如果 xxx 是系统的类型,比如: error: undefined reference to DwmExtendFrameIntoClientArea 是因为没找到对应的 Dwmapi.lib 文件。此错误往往伴随 warning: unknown pragma ignored 出现。

warning: unknown pragma ignored

这是因为 QT 不支持注解。

open file.pro

append line:

LIBS += -LC:/Windows/System32 -lcrypt32

module "xxx" is not installed

main.cpp 手动添加:

engine.addImportPath("A:\proj\qt\Expx\imports");

.pro 手动增加:

QML_IMPORT_PATH += "A:\proj\qt\Expx\imports"

Shit

Menu {
            background: Rectangle {

必须给定 implicitWidth,implicitHeight,否则会消失。

Others

Q_OBJECT 的作用

只有加入了 Q_OBJECT ,你才能使用 QT 中的 signal 和 slot 机制。

C++ explicit 关键字

explicit 用于修饰只有一个参数的类构造函数, 表明该构造函数是显式的, 防止类构造函数的隐式自动转换. 默认情况下声明为implicit(隐式).

Q_NULLPTR

QWidget *parent = Q_NULLPTR

使得当前 Widget 能够以独立窗口的形式存在。

Q_NULLPTR null nullptr

Q_NULLPTR is a macro, that is replaced as nullptr if compiler supports c++11 and as NULL (which is replaced as 0) if it doesn't. If you use c++11, you can write nullptr instead; use NULL if you don't.

自定义字体

#include <QFontDatabase>

void InstallDefaultFont()
{
    qint32 fontId = QFontDatabase::addApplicationFont(":/NotoSansHans-Light.otf");
    QStringList fontList = QFontDatabase::applicationFontFamilies(fontId);

    QString family = fontList.at(0);
    QGuiApplication::setFont(QFont(family));
}

常用参考

Customizing Qt Quick Controls

Qt Quick Layouts

How to make a QML Component a Singleton?

Constants in qml files

菜单下划线问题

菜单阴影

发表评论

电子邮件地址不会被公开。 必填项已用*标注