我现在正在尝试将我的应用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?" …在我的应用程序中,我有一个注册为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();
  }
}
在这里我将该类的实例注册为singleton:
qmlRegisterSingletonType<Config>("myNS", 1, 0, "Config", config_singletontype_provider);
在QML文件的某个地方,我尝试将javascript数组传递回c ++;
function sendValue() {
  var arr = [];
  arr["key"] = "value";
  Config.sendValue(arr);      
}
但没有通过.将map.size()在C++返回0.也许我需要一些额外的转换?
如何在QML表单中将焦点从一个控件移动到下一个控件?默认情况下它适用于Tab按钮,但我需要将其更改为Enter.所有控件都订购Gridlayout有2列.
是否可以仅使用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);
 }
} 
但是我仍然无法检测光标下的文本格式。
如果有人可以共享一些代码片段或其他内容,我会感到很高兴。
任何建议将被认真考虑。
我工作了很长时间,QGraphicsItem它有transform()功能.现在我不会做同样的事情,QQuickItem但不幸的是它错过了transform().所以我的问题 - 如何获得变换矩阵QQuickItem?
在我的css文件中我有渐变规则,像这样:
background-image:linear-gradient(to right, #FF0000 0%, #00FF00 20px, rgb(0, 0, 255) 100%);
我想得到这个字符串的所有部分.预期产出是:
linear-gradient
to right
#FF0000 
0%, 
#00FF00 
20px, 
rgb(0, 0, 255) 
100%
对我来说,整个字符串的工作太难了所以我决定把它分成几部分.
线性梯度
.*gradient[^\(]?
颜色
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]?)?
对
(?<=\()(.*(top|left|right|bottom|center).*?)(?=,)
但最后的正则表达式在JS中不起作用,因为它没有正则表达式.不久,我需要在这里得到"("和","
为了调整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 …在下面的代码中,我想将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();
}
但我得到奇怪的错误:
错误:没有匹配函数来调用'Updater :: connect(QProcess*[未解析的重载函数类型],Updater :: start()::)'});
我在这做错了什么?代码在从QObject派生的类的方法内执行.该项目配置为使用c ++ 11.
我在Linux x32上使用Qt 5.3.1和gcc 4.9.2
在我的应用程序中,我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);
    }
}
这有效,但放大然后缩小不会导致相同的结果。有一个小的偏差。调试后我发现chart()->plotArea()总是返回相同的矩形,所以这个解决方法没用。
有没有办法只获得可见区域的矩形?或者可能有人可以为我指出正确的解决方案,如何通过鼠标为 QChartView 进行缩放/滚动?
我有一个包含多个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)
}
所以现在我有点困惑,我怎么能以正确的方式加载文件?