小编fol*_*bis的帖子

QML表单布局(GridLayout)的麻烦

我现在正在尝试将我的应用UI从C++转换为QML.在某些步骤我需要一个登录窗口,所以我用QML创建它,代码如下:

Window {
    id: loginWindow
    property string username: login.text;
    property string password: password.text;
    property bool issave: savePassword.checked;

    flags: Qt.Dialog
    modality: Qt.WindowModal
    width: 400
    height: 160
    minimumHeight: 160
    minimumWidth: 400
    title: "Login to program"

    GridLayout {
        columns: 2
        anchors.fill: parent
        anchors.margins: 10
        rowSpacing: 10
        columnSpacing: 10

        Label {
            text: "Login"
        }
        TextField {
            id: login
            text: Config.getParam("user")
            Layout.fillWidth: true
        }

        Label {
            text: "Password"
        }
        TextField {
            id: password
            text: Config.getParam("password")
            echoMode: TextInput.Password
            Layout.fillWidth: true
        }

        Label {
            text: "Save password?" …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2 qtquickcontrols

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

QML - 将Javascript关联数组传递给C++

在我的应用程序中,我有一个注册为singleton的类QML.我的目的是在QML关联数组中收集值并将此数组传递给C++.这是该类的简化版本:

class Config : public QObject
{
Q_OBJECT
private:
  Config(QObject *parent = 0);
public:
  static Config *instance();
  ~Config();
  Q_INVOKABLE void sendValue (const QVariantMap &map) {
    qWarning() << map.size();
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里我将该类的实例注册为singleton:

qmlRegisterSingletonType<Config>("myNS", 1, 0, "Config", config_singletontype_provider);
Run Code Online (Sandbox Code Playgroud)

在QML文件的某个地方,我尝试将javascript数组传递回c ++;

function sendValue() {
  var arr = [];
  arr["key"] = "value";
  Config.sendValue(arr);      
}
Run Code Online (Sandbox Code Playgroud)

但没有通过.将map.size()C++返回0.也许我需要一些额外的转换?

javascript c++ arrays qml qt-quick

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

QML:转到下一个控件的形式

如何在QML表单中将焦点从一个控件移动到下一个控件?默认情况下它适用于Tab按钮,但我需要将其更改为Enter.所有控件都订购Gridlayout有2列.

qt qml qtquick2

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

QML富文本编辑器

是否可以仅使用QML组件创建简单的RTF编辑器?

我现在正在尝试这样做,TextArea但是它似乎无法处理格式化的文本。当然,我可以做这样的事情:

ToolButton {
 text: "Bold"
 onClicked: {
     var start = textArea.selectionStart;
     var end = textArea.selectionEnd;
     var text = textArea.getText(start,end);
     text = "<strong>" + text + "</strong>";
     textArea.remove(start,end);
     textArea.insert(start,text);
 }
} 
Run Code Online (Sandbox Code Playgroud)

但是我仍然无法检测光标下的文本格式。

如果有人可以共享一些代码片段或其他内容,我会感到很高兴。

任何建议将被认真考虑。

qt rich-text-editor qml qtquick2

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

如何获得QQuickItem的变换矩阵?

我工作了很长时间,QGraphicsItem它有transform()功能.现在我不会做同样的事情,QQuickItem但不幸的是它错过了transform().所以我的问题 - 如何获得变换矩阵QQuickItem

qt qml qtquick2

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

使用Javascript正则表达式解析css渐变规则

在我的css文件中我有渐变规则,像这样:

background-image:linear-gradient(to right, #FF0000 0%, #00FF00 20px, rgb(0, 0, 255) 100%);
Run Code Online (Sandbox Code Playgroud)

我想得到这个字符串的所有部分.预期产出是:

linear-gradient
to right
#FF0000 
0%, 
#00FF00 
20px, 
rgb(0, 0, 255) 
100%
Run Code Online (Sandbox Code Playgroud)

对我来说,整个字符串的工作太难了所以我决定把它分成几部分.

线性梯度

.*gradient[^\(]?
Run Code Online (Sandbox Code Playgroud)

颜色

rgb ?\([ 0-9.%,]+?\)|#[0-9a-fA-F]{3,6}\s[0-9]{1,3}[%|px]|#[0-9a-fA-F]{3,6}|(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow){1}(\s[0-9]{1,3}\s*[%|px]?)?
Run Code Online (Sandbox Code Playgroud)

(?<=\()(.*(top|left|right|bottom|center).*?)(?=,)
Run Code Online (Sandbox Code Playgroud)

但最后的正则表达式在JS中不起作用,因为它没有正则表达式.不久,我需要在这里得到"("和","

javascript css regex gradient

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

设置 ItemIsMovable 标志时,子项在 QGraphicsView 中不可移动

为了调整QGraphicsView中的项目大小,我将表示顶点的子项目放置到要移动的项目上(使用构造函数中建立的父子关系)。就是下图中的四个蓝色圆圈:

一个例子

但子顶点没有接收鼠标事件。只有父项(红色方块)正在获取鼠标事件。

这是 的定义Item

Item::Item(QGraphicsItem * parent) :
    QGraphicsItem(parent)
{
    setFlag(ItemIsMovable);
    setFlag(ItemIsSelectable);
    setFlag(ItemSendsGeometryChanges);
    setCacheMode(DeviceCoordinateCache);   
}

void Item::paint(
    QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->fillRect(option->rect,Qt::red);
}

QVariant Item::itemChange(GraphicsItemChange change, const QVariant & value)
{
    switch(change)
    {
        case QGraphicsItem::ItemSelectedHasChanged:
            qWarning() << "item: " + value.toString();
            updateVertices(value.toBool());
            break;
        default:
            break;
    }
    return QGraphicsItem::itemChange(change, value);
}

void Item::updateVertices(bool visible) {
    if(visible) {
        if(vertices.length() == 0) {
            for(int i = 0; i < 4; i++)
                vertices.append(new Vertice(this));
        } else …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtgui qgraphicsitem qt5

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

将lambda函数连接到QProcess :: error时出错

在下面的代码中,我想将lambda函数连接到QProcess :: error signal:

void Updater::start() {
    QProcess process;
    QObject::connect(&process, &QProcess::error, [=] (QProcess::ProcessError error) {
        qWarning() << "error " << error;
    });
    process.start("MyProgram");
    process.waitForFinished();
}
Run Code Online (Sandbox Code Playgroud)

但我得到奇怪的错误:

错误:没有匹配函数来调用'Updater :: connect(QProcess*[未解析的重载函数类型],Updater :: start()::)'});

我在这做错了什么?代码在从QObject派生的类的方法内执行.该项目配置为使用c ++ 11.

我在Linux x32上使用Qt 5.3.1和gcc 4.9.2

lambda qt qprocess c++11

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

使用鼠标滚轮缩放 QChartView 的 x 轴

在我的应用程序中,我QChart用来显示折线图。不幸的是,Qt Charts 不支持使用鼠标滚轮缩放和通过鼠标滚动等基本功能。是的,有橡皮筋功能,但仍然不支持滚动等,这对用户来说不是那么直观。另外我只需要缩放 x 轴,某种setRubberBand(QChartView::HorizontalRubberBand)但使用鼠标滚轮。到目前为止,在深入研究之后,QChartView我使用了以下解决方法:

class ChartView : public QChartView {
protected:
    void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
    {
        QRectF rect = chart()->plotArea();            
        if(event->angleDelta().y() > 0)
        {
            rect.setX(rect.x() + rect.width() / 4);
            rect.setWidth(rect.width() / 2);                                   
        }
        else
        {
            qreal adjustment = rect.width() / 2;
            rect.adjust(-adjustment, 0, adjustment, 0);                    
        }            
        chart()->zoomIn(rect);
        event->accept();            
        QChartView::wheelEvent(event);
    }
}
Run Code Online (Sandbox Code Playgroud)

这有效,但放大然后缩小不会导致相同的结果。有一个小的偏差。调试后我发现chart()->plotArea()总是返回相同的矩形,所以这个解决方法没用。

有没有办法只获得可见区域的矩形?或者可能有人可以为我指出正确的解决方案,如何通过鼠标为 QChartView 进行缩放/滚动?

c++ qt qt5 qtcharts

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

资源内的文件找不到本地文件

我有一个包含多个QML文件的项目.所有这些都在资源文件中.现在我想从本地文件系统加载外部图像.但我找不到办法做到这一点.

Image {
    source: "images/image.png" // that tries to load file as 'qrc:/images/image.png'
    source: "file://images/image.png" // that does not work (file not found)
}
Run Code Online (Sandbox Code Playgroud)

所以现在我有点困惑,我怎么能以正确的方式加载文件?

c++ qt resource-file qml qt-quick

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