关闭应用程序时,以下示例代码与此错误崩溃:
QBasicTimer::start: QBasicTimer can only be used with threads started with QThread
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import sys
from PyQt4 import QtGui ,QtCore
app = QtGui.QApplication(sys.argv)
data=[]
data.append("one")
model=QtGui.QStringListModel(data)
combobox=QtGui.QComboBox()
combobox.show()
combobox.setModel(model)
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
我发现这是关于使用模型,但我不知道如何解决它.
编辑:os:win 7 64bit pyqt4
是否可以使用 QStringListModel 将图标添加到 ListView ?
这就是我正在做的。
QStringListModel* model;
QStringList List;
model->setStringList(List);
ui->listView->setModel(model);
...
model->setData(index, "Test");
model->setData(index,QIcon(":/icon.png"),Qt::DecorationRole);
Run Code Online (Sandbox Code Playgroud)
不幸的是,该图标没有出现在列表中。
如何将图标添加到列表中?
所以我是 Qt 的新手,我正在努力提高我的 C++ 技能,所以我决定开始一个项目,在那里我可以使用文本字段搜索 QStringList 中的项目。我使搜索功能正常工作,并且能够将搜索结果移动到另一个QStringList,在那里我可以使用它在声明为“公共插槽”的函数中向用户显示。
主要想法是,一旦用户在文本字段中输入字符,列表就会自动更新,它已经这样做了。所以我设法将结果列表放入 Slot 函数中,以便每次在文本字段中输入字符时都能显示不同的列表。
在我传入搜索结果列表的函数中,我试图使用它
m_context->setContextProperty("resultModel",QVariant::fromValue(m_resultList));
Run Code Online (Sandbox Code Playgroud)
哪里resultModel是我的模型在 QML 中的名称,m_resultList是存储搜索结果的位置,以在ListView. 我的程序可以编译,但运行后崩溃了。
所以,我真正的问题是:有什么方法可以将不在 main.cpp 中的 C++ QStringList 显示到 QML ListView 中?
我要求它不在 main 中的原因是因为我试图在 main.cpp 中使用上面的同一行硬编码QStringList并且列表能够显示,所以它一定有问题不在主要。也因为我无法使用插槽功能SearchClass来自动更新。
主程序
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QDebug>
#include "searchclass.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<SearchClass>("b9c.backend", 1, 0, "BackEnd");
QQmlApplicationEngine engine;
SearchClass obj;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQmlContext *context = engine.rootContext();
obj.getContext(context);
//the line below works …Run Code Online (Sandbox Code Playgroud)