标签: qt5.3

QML ListView方法positionViewAtEnd()完全相反

我要疯了.我在ScrollView中有一个ListView,连接到一个继承QAbstractListModel的模型.将对象添加到模型时,ListView使用委托显示它们.到现在为止还挺好.

但我真的希望视图保持滚动到底部(就像聊天窗口一样),而且我很难实现这一点.这是相关的QML代码:

Rectangle {
    ScrollView {
        [anchor stuff]

        ListView {
            id: messageList
            model: textMessageFiltered
            delegate: messageDelegate
        }
    }

    TextField {
        id: messageEditor
        [anchor stuff]

        onAccepted: {
            controller.sendTextMessage(text)
            text = ""

            /* This works. */
            //messageList.positionViewAtEnd();
        }
    }

    Component {
        id: messageDelegate
        Rectangle {
            anchors.left: parent.left
            anchors.right: parent.right

            color: "white"
            height: nameText.height + 4

            Text {
                id: nameText
                wrapMode: Text.Wrap
                text: "<b>" + authorName + " (" + authorId + ")</b>  " + message
                [anchor stuff]
            }
            ListView.onAdd: {
                console.log("This prints …
Run Code Online (Sandbox Code Playgroud)

qt listview qml qt5.3

16
推荐指数
2
解决办法
6547
查看次数

无法隐藏QMenu对象QMenu :: setVisible()?

我已经建立了QMenu MainMenu我的上顶MainWindow在我的应用程序.每个人都习惯了,我有以下QMenu主菜单:

文件 - 编辑 - SuperHeavyExpertMenus - 设置 - 帮助

我想SuperHeaverExpertMenus在程序启动时最初隐藏子树,因为它会包含很多设置,这可能会使初学者用户感到困惑.

例如,我想SuperHeavyExpertMenu在"设置"中的复选框为真时显示该子树.

我可以隐藏孩子QActions的的QMenu上述S,争夺QAction:setVisible(false).但我能做到这一点QMenu吗?

有没有办法隐藏QMenu

qt qmenu qt5 qaction qt5.3

10
推荐指数
1
解决办法
3222
查看次数

当使用Qt 5.3或Qt 5.4编译电话时,QGuiApplication会停止事件循环(但不会使用Qt 5.2)

我创建了一个简单的程序来重现问题.当我锁定手机,或者如果我切换到我的Android手机中的另一个应用程序时,工作线程继续打印,但事件循环停止.当我切换回我的应用程序时,事件循环重新开始.

如果我用QCoreApplication替换QGuiApplication,问题就会消失.如果我用Qt 5.2而不是Qt 5.3编译,问题就会消失.Qt 5.4与Qt 5.3具有相同的问题.

static int count = 0;

void workerThread()
{
    while (1) {
        qDebug("Worker thread %d", count++);
        sleep(1);
    }
}

void MyObject::step()
{
    qDebug("Event loop %d", count++);
}

int main(int argc, char *argv[])
{
    QGuiApplication a(argc, argv);
    MyObject w;
    QTimer timer;
    QObject::connect(&timer, SIGNAL(timeout()), &w, SLOT(step()));
    timer.start(1000);
    QtConcurrent::run(workerThread);
    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

当应用程序失去焦点时,如何阻止QGuiApplication停止事件循环?我需要我的应用程序来处理事件,即使不在前台.

c++ qt android qt5.3 qt5.4

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

如何在打开其他 QML 窗口时隐藏 QML 窗口

单击按钮打开另一个 QML 窗口时,我需要隐藏 QML 窗口,我使用 Loader 打开另一个 QML 窗口,它只隐藏 QML 表单组件而不是 QML 窗口,但我目前使用窗口组件打开 QML 窗口

这是我的代码:

Button {
        id: button2
        x: 19
        y: 54
        width: 114
        height: 25
        text: qsTr("DIFF-R")
        style: ButtonStyle {
            background: Rectangle {
                implicitWidth: 10
                implicitHeight: 25
                border.width: control.activeFocus ? 2 : 1
                border.color: "#555"
                radius: 10
                gradient: Gradient {
                    GradientStop { position: 0 ; color: control.pressed ? "#ddd" : "#fff" }
                    GradientStop { position: 1 ; color: control.pressed ? "#8ad993" : "#528dc8" }

                }
    }
} …
Run Code Online (Sandbox Code Playgroud)

qml qqmlcomponent qt5.3 qt5.4

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

Raspberry Pi上未安装模块"QtQuick.Controls"

我正在尝试使用qt5(5.3.2)在运行Raspbian-Jessie的Raspberry pi 3上编译一些qml.
我设法运行一些简单的东西但现在我需要使用QtQuick.Controls所以我添加import QtQuick.Controls 1.0到我的qml 文件但是当我尝试运行它时,我收到此错误消息:module "QtQuick.Controls" is not installed
Qt安装在以下文件夹中/usr/lib/arm-linux-gnueabihf/qt5/(它是自动检测到的)所以我去那里发现QtQuick Controls实际上在那里(中[path to qt]/qml/QtQuick/Controls)

我是否需要做一些实际的安装?
我试图添加/usr/lib/arm-linux-gnueabihf/qt5/qml/QtQuick/Controls,QML_IMPORT_PATH但我仍然收到错误消息.
我也看过,我需要QtQuick 2.0 QtQuick.Controls工作,但是当我改变import QtQuick 1.0import QtQuick 2.0我得到一个module "QtQuick" version 2.0 is not installed
任何人都设法在树莓派使用QtQuick.Controls?
关于如何调试这个的任何建议?

qt-quick raspbian qtquickcontrols qt5.3

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

如何更改QML对话框/窗口的临时父代?

我正在开发一个Qt(5.3)桌面应用程序(带有QML ui的C++核心),其主窗口是一个ApplicationWindow,并且在某些时候启动Dialogs.由于在Windows和Mac OS X之间使用对话框模式存在差异(例如,关于对话框在Mac OS X上很少是模态的,但在Windows上几乎总是模态的),而且在呈现一些对话框的内容方面,我也是我们改变了设计,允许实现特定于平台的对话框版本.

为此我创建了以下DialogLoader:

Loader {
    id: dialogFactory
    property string dialogName
    function platformFolder() {
        if (Qt.platform.os === "osx")
            return "osx"
        return "win"
    }
    onDialogNameChanged: { source = platformFolder() + "/" + dialogName + ".qml" }
    onStatusChanged: {
        if (dialogFactory.status === Loader.Error)
            console.log("DialogFactory: failed to load file: " + source);
        else if (dialogFactory.status === Loader.Ready)
            console.log("DialogFactory: file \"" + source + "\" loaded")
    }
}
Run Code Online (Sandbox Code Playgroud)

我用的如下:

ApplicationWindow {
    // …
    property alias …
Run Code Online (Sandbox Code Playgroud)

qt qml qt5 qt5.3

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

在QT QTextEdit中粘贴表情符号

我试图在QT QTextEdit框中粘贴表情符号,但它没有被识别,它显示为??? 要么 [][]

我不是在谈论笑脸,我在谈论表情符号.

我怎样才能确保QT的QTextEdit接受表情符号并正确显示它们?

谢谢.

根据以下有用的答案得到它:

解:

    QFontDatabase fontDB;
    fontDB.addApplicationFont(":/Resources/fonts/seguisym.ttf");

    QApplication::setFont(QFont(QStringLiteral("Segoe UI Symbol")));
Run Code Online (Sandbox Code Playgroud)

c++ user-interface qt qt4 qt5.3

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

C++命名空间(选择器)中派生类的Qt样式表

我想将我的全局qss样式表与派生类一起使用.我知道我必须覆盖paintEvent(样式表参考,或在这里).

void CustomWidget::paintEvent(QPaintEvent *) {
     QStyleOption opt;
     opt.init(this); // tried initFrom too, same result=>not working
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不起作用.使用CDerived:QWidget和我面对的以下样式表行:

CDerived { background-color: black; } // no effect
QWidget {  background-color: black; } // works
Run Code Online (Sandbox Code Playgroud)

CDerived实施paintEvent如上.还有什么我需要做的吗?

- 编辑/解决方案 -

感谢JK的提示,我已经弄明白了.我上面的例子实际上没有正确反映我的场景.我真正的类位于C++命名空间中(我错过了我的错误).所以我必须写MyNamespace--CDerived在qss中.请参阅" C++命名空间内的小部件 "

在我尝试了JK的简单例子后,我突然意识到自己的错误!

纠正一个:

MyNamespace--CDerived { background-color: black; } // works, use -- for ::
Run Code Online (Sandbox Code Playgroud)

备注:相关问题问题(a,b),但没有回答这个特定问题.我的派生类驻留在C++命名空间中.

c++ qtstylesheets qt5.3

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

QTableView 中仅可编辑复选框的列

我有一个带有复选框的列QTableView。该复选框由以下生成:

  1. 返回Qt::ItemIsUserCheckable覆盖的flags成员函数
  2. 在重写的data()函数中,我根据数据返回一个Qt::CheckStateforrole == Qt::CheckStateRole

有效,见截图。

但在复选框旁边,我在列中有一些可编辑的文本框。我怎样才能摆脱这个文本框(我在其中输入了“dsdsdsds”进行演示?澄清一下,复选框应该是可编辑的,但没有别的。

读取模式 编辑模式


根据要求,我只能显示简化版

Qt::ItemFlags MyClass::flags(const QModelIndex &index) const {
 Qt::ItemFlags f = QAbstractListModel::flags(index);
 ... return f if index is not target column ....
 // for target column with checkbox
 return (f | Qt::ItemIsEditable | Qt::ItemIsUserCheckable; )
}


QVariant MyClass::data(const QModelIndex &index, int role) const {
  .. do something for other columns
  .. for checkbox column
  if (role != Qt::CheckStateRole) { …
Run Code Online (Sandbox Code Playgroud)

c++ qwidget qtableview qcheckbox qt5.3

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

Raspberry Pi上无法运行Qt5视频播放器示例

我在Raspberry pi 2 B Model上安装了Qt creator(Qt5)及其示例.我正在运行Raspbian Jessie.我试图运行一个视频播放器示例,但我最终得到一个错误,如下所示:

启动/ usr/lib目录/ ARM-Linux的gnueabihf/QT5 /例子/ multimediawidgets /建造玩家 - 桌面 - 调试器/播放器... libEGL警告:GLX/DRI2不支持libEGL警告:DRI2:无法验证

(播放器:841):GStreamer-CRITICAL**:gst_object_ref_sink:断言'GST_IS_OBJECT(对象)'GStreamer失败; 无法播放 - "file:///home/pi/Desktop/test_video.mp4"GStreamer; 无法播放 - "file:///home/pi/Desktop/test_video.mp4"警告:"没有解码器可用于类型'video/quicktime,variant =(string)iso'."

请让我知道如何解决这些"Gstreamer"和"No decoder"的问题.

qt-creator qt5.3 raspberry-pi2

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