小编BaC*_*Zzo的帖子

用C++创建QML元素?

我有以下问题:

我将初始界面加载到QQuickView使用.qml文件中.然后我要添加QML类型等的Image或者Text使用C++的接口.

我知道我可以操纵C++中的现有元素,但是如何创建新类型并添加它们呢?

qt qml qt5 qtquick2

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

在ListView中使用QAbstractListModel

我是Qt的新手,所以请耐心等待.

我已成功设法从StringList和Object的QList填充ListView*

我现在正在努力的是使用在C++中定义的派生QAbstractListModel的类在QML中填充ListView.

这是我的CPP类的原型:

class MessageListEntryModel : public QAbstractListModel
{

Q_OBJECT
public:

enum eMLERoleTypes
{
    MLERT_MSG = Qt::UserRole+1,
    MLERT_COLOR
};

                                MessageListEntryModel(QObject* parent=0);
        virtual                 ~MessageListEntryModel();

        void                    AddEntry(QString aMessage, QColor aColor);

        // pure virtuals implementations
        QVariant                data(const QModelIndex &index, int role = Qt::DisplayRole) const;
        int                     rowCount(const QModelIndex &parent = QModelIndex()) const ;
        int                     columnCount(const QModelIndex &parent = QModelIndex()) const ;
        QModelIndex             index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
        QModelIndex             parent(const QModelIndex &child) const ;

        QHash<int,QByteArray>   roleNames();
private:
 QList<MessageEntry*> m_vpMessages; …
Run Code Online (Sandbox Code Playgroud)

qt listview qabstractlistmodel qt5 qtquick2

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

QQmlListProperty vs QAbstractListModel

我试图了解如何选择是否使用a QAbstractListModelQObjecta QQmlListProperty.

鉴于QQmlListProperty处理"角色"功能必须使用QAbstractListModel它来编写,它似乎是不那么乏味的路线.

我不知道大多数人是否建议使用QAbstractListModel仅仅因为它已经存在更长时间或者由于某种原因它是更好的选择.

我也没有找到任何关于两种选择之间权衡的讨论.这个问题是在Qt开发者日讨论讨论期间提出的QAbstractListModel,但答案是"那也行".

qt qml qabstractlistmodel

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

QML Canvas.requestAnimationFrame爆炸

我正在尝试使用QML Canvas.requestAnimationFrame绘制一些自定义动画.我期望为每个帧调用一次提供的回调,大约每秒60次.我的代码是:

Canvas {
    id: canvas

    width: 600
    height: 600

    function draw() {
    }

    Component.onCompleted: {
        var i = 1;

        function drawFrame() {
            requestAnimationFrame(drawFrame)
            console.log("Frame callback: " + i++)
            draw()
        }

        drawFrame()
    }

    onPaint: {
        draw()
    }

}
Run Code Online (Sandbox Code Playgroud)

我看到的是回调被更频繁地调用.计数器在几秒钟内达到70000,之后应用程序变得完全没有响应.

我究竟做错了什么?

qt canvas qml qtquick2

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

QML拖放(自由定位)

那里有很多QML拖放示例,但它们都没有真正帮助我,因为在所有示例中,您可以将一个元素拖动到另一个元素中,它在哪里居中,而上面拖动的所有其他元素都在它上面.

有没有办法在一侧有一些元素,在另一侧有一个大的Rectangle地方可以拖入它们,将它们放在它内部的任何地方并且它们保持在它们的确切下落位置?

举例来说,如果我有一个Rectanglewidth: 200; height: 200我在,这样的元素应该留在我已经放弃了它的位置,例如拖动的元素x: 25y: 65.这应该是元素的位置.

你有什么建议吗?

drag-and-drop qml qt-quick qtquick2

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

具有居中内容的流程布局

当窗口宽度太小而无法显示行中的所有项目时,我有一行包含应该堆叠的项目,如下面的草图所示:

在此输入图像描述

Flow组件堆的项目,但他们不是中心,但在左侧或右侧对齐:

Flow {
    Item {}
    Item {}
    Item {}
    Item {}
    Item {}
}
Run Code Online (Sandbox Code Playgroud)

QML中是否有内置方式使流量居中?

qml qt5 qtquick2

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

在使用QFileDialog时,如何找出用户选择的后缀?

好吧,我正在使用以下代码来获取需要存储的文件的文件名.

QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"/home/user/MyDocs/",tr("JPG files (*.jpg);;BMP files (*.bmp);;PNG files (*.png)"));
Run Code Online (Sandbox Code Playgroud)

我正在为用户提供有关要保存文件的文件格式的许多选项.但是,返回QString只给出了用户选择的前缀文件名,而不是后缀,因此我不知道用户选择了哪种文件格式.如何检测这种文件格式?

qt qfiledialog

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

如何自动隐藏ApplicatioWindow menuBar?

我希望ApplicationWindow有一个自动隐藏menuBar,当鼠标光标位于窗口的最上部时显示.这在QML中是否可行?

PS:我正在使用Qt 5.3.

提前致谢.

qt qml

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

如何将QML ScrollView滚动到中心?

我有这样的代码:

ScrollView {
    Image {
        source: "..."
    }
}
Run Code Online (Sandbox Code Playgroud)

Image高于ScrollView.如何将后者滚动到中心位置Image

qt qml qtquick2

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

单个项目中的多个窗口

我要求我的项目Window在一个屏幕上显示两个QML (一个发送者,一个接收者).两者都.qml要求我在里面包含一些Cpp模型,因此我QQmlApplicationEngine用来注册Cpp模型.

我发现使用QWidget::createWindowContainer()我能够Window为一个项目显示多个s.这适用于第一个QML文件.代码片段如下所示:

QQmlApplicationEngine* engine = new QQmlApplicationEngine(Qurl("main.qml"));
QmlContext* context = engine.getContextProperty();

//do some Cpp models registering...

QQuickview *view = new QQuickview(engine,0);
QWidget* container = widget::createWindowContainer(view);  
//I realized I dont need to do container->show(); for the main.qml to appear..

//use desktop widget to move the 2nd container to the 2nd screen...
Run Code Online (Sandbox Code Playgroud)

我决定receive.qml用类似的方法为我创建第二个应用程序引擎.我很快意识到,receive.qml即使有了,也永远不会打开container2->show().现在,它显示一个空页面.

我的问题是:

  1. 我的方法是正确的还是有更好的解决方案?
  2. 我需要注意什么信号来捕捉窗口关闭事件?当其中一个窗口关闭时,我似乎无法检测到信号.因为我想在检测到两者时关闭它们.

qt qwidget qml qtquick2 qquickview

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